国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

WaitForSingleObject()函數、WaitForMultipleObject()函數

2019-11-08 18:37:39
字體:
來源:轉載
供稿:網友
在多線程下面,有時候我們會希望等待某一線程完成了再繼續做其他事情,要實現這個目的,可以使用Windows API函數WaitForSingleObject,或者WaitForMultipleObjects。這兩個函數都會等待Object被標為有信號(signaled)時才返回的。那么,什么是信號呢?簡單來說,Windows下創建的Object都會被賦予一個狀態量。如果Object被激活了,或者正在使用,那么該Object就是無信號,也就是不可用;另一方面,如果Object可用了,那么它就恢復有信號了。

這兩個函數的優點是它們在等待的過程中會進入一個非常高效沉睡狀態,只占用極少的CPU時間片。(這兩個函數都是在內核狀態下等待內核對象,不切換到用戶模式下,因而效率很高)

WaitForSingleObject()

1. 格式

DWord WaitForSingleObject( HANDLE hHandle, DWORDdwMilliseconds);

有兩個參數,分別是THandle和Timeout(毫秒單位)。

如果想要等待一條線程,那么你需要指定線程的Handle,以及相應的Timeout時間。當然,如果你想無限等待下去,Timeout參數可以指定系統常量INFINITE。

2. 使用對象

它可以等待如下幾種類型的對象:

Event,Mutex,Semaphore,PRocess,Thread 

3. 返回類型

有三種返回類型:

WAIT_OBJECT_0, 表示等待的對象有信號(對線程來說,表示執行結束);

 WAIT_TIMEOUT, 表示等待指定時間內,對象一直沒有信號(線程沒執行完);

WAIT_ABANDONED 表示對象有信號,但還是不能執行  一般是因為未獲取到鎖或其他原因

示例:

[cpp] view plain copyprint?<span style="font-family:Times New Roman;">#include <windows.h>  #include <stdio.h>  #include <iostream.h>    //聲明函數  創建線程  DWORD WINAPI FunProc( LPVOID lpParameter);     void main()  {      HANDLE hThread;      hThread=CreateThread(NULL,0,FunProc,NULL,0,NULL);      DWORD dwRet=WaitForSingleObject(hThread, 1);      if(dwRet==WAIT_OBJECT_0)      {          printf("創建的線程執行結束/n");      }      if(dwRet==WAIT_TIMEOUT)      {          printf("等待超時/n");      }      if(dwRet==WAIT_ABANDONED)      {          printf("Abandoned/n");      }      CloseHandle(hThread);  }    DWORD WINAPI FunProc( LPVOID lpParameter )  {         int i=1;      for(; i<1000; i++)      {          printf("%d  ", i);          if(! (i%10))              printf("/n");      }      return 0;  }</span>  
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 兴业县| 卓资县| 威海市| 垫江县| 咸宁市| 革吉县| 三门县| 遂溪县| 泰来县| 那曲县| 泾源县| 佛教| 武强县| 玉田县| 蒲城县| 水城县| 浑源县| 凌海市| 苏尼特右旗| 青川县| 通州市| 盐津县| 柳林县| 神农架林区| 嘉善县| 如皋市| 金坛市| 赤峰市| 靖州| 疏勒县| 黄陵县| 大足县| 赣榆县| 革吉县| 阜宁县| 宕昌县| 青龙| 余姚市| 莱西市| 桃源县| 改则县|