WaitForSingleObject


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和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM