windows多執行緒(二) 等待執行緒返回

2022-02-22 09:07:32 字數 2852 閱讀 1865

多執行緒程式設計中,有時我們需要等待某一線程完成了特定的操作後再繼續做其他事情,要實現這個目的,可以使用windows api函式waitforsingleobject,或者waitformultipleobjects。這兩個函式都會等待object被標為有訊號(signaled)時才返回。只要是windows建立的object都會被賦予乙個狀態量。如果object被啟用了,或者正在使用,那麼該object就是無訊號,也就是不可用;另一方面,如果object可用了,那麼它就恢復有訊號了。

1. 函式原型

dword winapi waitforsingleobject(

_in_ handle hhandle,

_in_ dword dwmilliseconds

);

2.引數說明

第乙個引數_in_ handle hhandle是物件的控制代碼,可以是以下幾種:

第二個引數_in_ dword dwmilliseconds為等待時間,以毫秒為單位。引數dwmilliseconds有兩個具有特殊意義的值:0和infinite。若為0,則該函式立即返回;若為infinite,則執行緒一直被掛起,直到hhandle所指向的物件變為有訊號狀態時為止。

3.返回值

4.例項

1.引數 dwmilliseconds 為0,則該函式立即返回

#include #include dword winapi  threadfunc(lpvoid);

int main()

dword winapi threadfunc(lpvoid p)

輸出如下圖,主線程不等待子執行緒返回,直接返回。

2.引數 dwmilliseconds 為5000,等待5秒後返回。

#include #include dword winapi  threadfunc(lpvoid);

int main()

dword winapi threadfunc(lpvoid p)

輸出如下圖,主線程等待子執行緒5秒後,子執行緒還沒有執行完,waitforsingleobject就返回了。

3.引數 dwmilliseconds 為infinite,則執行緒一直被掛起,直到hhandle所指向的物件變為有訊號狀態時為止

#include #include dword winapi  threadfunc(lpvoid);

int main()

dword winapi threadfunc(lpvoid p)

輸出如下圖,主線程一直等待直到子執行緒還沒有執行完畢。

1. 函式原型

dword winapi waitformultipleobjects(

_in_ dword ncount,

_in_ const handle *lphandles,

_in_ bool bwaitall,

_in_ dword dwmilliseconds

);

2.引數說明

3.例項

1.引數 bwaitall 為 false,只要乙個核心物件為已通知狀態,則該函式返回。

#include #include const unsigned int thread_num = 10;

dword winapi threadfunc(lpvoid);

int main()

waitformultipleobjects(thread_num,hthread,false, infinite); //只要有乙個執行緒返回就結束

return 0;

}dword winapi threadfunc(lpvoid p)

輸出如下圖,只要有乙個執行緒返回就不再等待其它執行緒。

2.引數 bwaitall 為 true,等待所有執行緒返回。

#include #include const unsigned int thread_num = 10;

dword winapi threadfunc(lpvoid);

int main()

waitformultipleobjects(thread_num,hthread,true, infinite); //一直等待,直到所有子執行緒全部返回

return 0;

}dword winapi threadfunc(lpvoid p)

輸出如下圖,主線程等待所有執行緒返回。

好了,關於waitforsingleobject 和 waitformultipleobjects這兩個函式的介紹就先到這裡。 另外上面圖中有一行顯示了三列,這是正常現象,是由於沒有做執行緒同步造成的,關於執行緒同步的知識,將在以後的文章中介紹。畢竟多執行緒的精髓就是執行緒同步問題。

C 多執行緒初級二 等待程序

polythreaddemo.cpp 定義控制台應用程式的入口點。raii,也稱為 資源獲取就是初始化 是c 等程式語言常用的管理資源 避免記憶體洩露的方法。它保證在任何情況下,使用物件時先構造物件,最後析構物件。include stdafx.h include include include in...

Linux 執行緒 二 (等待與分離)

執行緒等待 為什麼需要執行緒等待?1.已經退出的執行緒,其空間沒有被釋放,仍然在程序的位址空間內 2.建立新的執行緒不會復用剛才退出的執行緒位址空間 我們知道程序內至少有乙個執行緒作為執行單位,當我們程序退出了,意味著我們的執行緒也退出了。但是程序內有多個執行緒時,我們只想結束掉其中的某乙個執行緒時...

10 等待執行緒死亡join方法

等待執行緒死亡 join 方法假設有三個執行緒,分別是執行緒a,執行緒b,和執行緒c他們各自的任務分別是列印數字 一 數字2和數字三,這三個執行緒同時啟動,如何讓這三個執行緒按順序執行任務,也就是按順序列印123,如果想讓多個執行緒按順序執行,可以使用thread類裡面的join方法,它的作用是等待...