hHandle对象句柄。可以指定一系列的对象,如Event、Job、Memory resource notification、Mutex、Process、
Semaphore、Thread、Waitable timer等。
当核心对象有2个状态:激发,未激发,
方法返回值:
1:在等待核心对象期间,对象变为激发状态,返回WAIT_OBJECT_0
2:核心对象变成激发状态之前,等待时间结束,返回WAIT_TIMEOUT
3:如果线程没有释放mutex,返回WAIT_ABANDONED
#include <iostream> #include <windows.h> using namespace std; DWORD WINAPI ThreadFun(PVOID par) { cout<<"线程方法正在执行..."<<endl; Sleep(3000); return 0; } int main() { DWORD ThreadID; HANDLE hThread=CreateThread(NULL,0,ThreadFun,(void*)0,0,NULL); while(TRUE) { //这里等待时间是设置的1秒钟,可以设置为INFINITE(就不需要外面的死循环了) DWORD r= WaitForSingleObject(hThread,1000); if(r==WAIT_TIMEOUT) { cout<<"WAIT_TIMEOUT"<<endl;//输出2-3次 continue; } else if(r==WAIT_OBJECT_0) { cout<<"WAIT_OBJECT_0"<<endl;//线程方法睡眠3秒以后输出 break; } else { cout<<"hello"<<endl; continue; } } CloseHandle(hThread); system("PAUSE"); return 0; }
WaitForMultipleObjects
#include <iostream> #include <process.h> #include <windows.h> #define ThMax 3//线程数 using namespace std; unsigned __stdcall ThreadFun(void* par) { cout<<"线程"<<*((int*)par)<<"正在执行..."<<endl; Sleep(3000); return 0; } int main() { HANDLE hThreads[ThMax]; int par[]={1,2,3}; int i=0; while(TRUE) { if(i<3) { hThreads[i]=(HANDLE)_beginthreadex(NULL,0,&ThreadFun,(void*)&(par[i]),0,NULL); Sleep(500); } else { //详细参考:http://msdn.microsoft.com/en-us/library/ms687025(v=vs.85).aspx //bWaitAll参数如果设置为TRUE,那么就必须所有核心对象是激发状态才会返回,FALSE则一个就返回 DWORD r=WaitForMultipleObjects(3,hThreads,TRUE,1000); if(r==WAIT_TIMEOUT) { cout<<"WAIT_TIMEOUT"<<endl; continue; } else if(r==WAIT_OBJECT_0) { cout<<"WAIT_OBJECT_0"<<endl; break; } else { cout<<"等待"<<endl; continue; } } i++; } for(int i=0;i<ThMax;i++) { CloseHandle(hThreads[i]); } cout<<"执行完毕"<<endl; system("PAUSE"); return 0; }
本文版权归kennyMc和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。