先直接贴代码
#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最后一个时间参数千万别勿用。
测试结果如下