关于线程的建立与删除。

先直接贴代码

#include <windows.h>  
#include <process.h>//_beginthreadex
#include <stdio.h>  
#include <iostream>
#define ThreadCount  2



unsigned _stdcall func1(LPVOID pvoid)
{
    Sleep(1000);
    return 0;
}
DWORD WINAPI func2(LPVOID pvoid)
{
    Sleep(500);
    return 0;
}


int main(int argc, char *argv[])
{
    std::cout << "start" << std::endl;
    HANDLE threads[ThreadCount];
    threads[0] = (HANDLE)_beginthreadex(NULL, 0, func1, NULL,NULL, NULL);
    SetThreadAffinityMask(threads[0], 1 << 0);
    threads[1] = CreateThread(NULL, 0, func2, NULL, 0, NULL);
    SetThreadAffinityMask(threads[1], 1 << 1);
    int a = 0x00;//标志位
    while (!(a == 0x11))
    {
         if ( (a&0x01)== 0 &&WAIT_OBJECT_0 == WaitForSingleObject(threads[0], 0))
        {
            std::cout << "step1 done" << std::endl;
            a|=0x01;
        }
        else if ((a&0x10) == 0 && WAIT_OBJECT_0 == WaitForSingleObject(threads[1], 0))
        {
            std::cout << "step2 done" << std::endl;
            a|= 0x10;
        }
    }
    std::cout << "All done" << std::endl;
    CloseHandle(threads[0]);
    CloseHandle(threads[1]);
    getchar();
    return 0;
}

首先如果有两个独立的线程,需要不断的判断其标志位,如果有其他的方法,欢迎指正(刚接触多线程)。

1.不要用wait,用sleep;百度下就知道

2.WaitForSingleObject最后一个时间参数千万别勿用。


测试结果如下


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值