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