日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

等待一个线程的结束

發布時間:2025/3/12 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 等待一个线程的结束 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Win32 提供WaitForSingleObject()函數,其第一個參數是一個核心對象(如線程)的 handle。為方便討論,把等待線程稱為線程#1,把被等待線程稱為線程#2。

調用 WaitForSingleObject()并放置一個“線程句柄”作為參數,將使線程#1開始睡眠,直到線程#2結束。像Sleep()函數一樣,WaitForSingleObject()也有一個參數用來指定最長的等待時間。

DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds );

hHandle:等待對象的 handle(代表一個核心對象)。

dwMilliseconds:等待的最長時間。時間終了,即使 handle尚未成為激發狀態,此函數也要返回。此值可以是0(代表立刻返回),也可以是 INFINITE代表無窮等待。

如果函數失敗,返回WAIT_FAILED。這時可調用 GetLastError()取得更多信息。

此函數的成功有三個因素:

1. 等待的目標(核心對象)變成激發狀態。返回值為WAIT_OBJECT_0。

2. 核心對象變成激發狀態之前,等待時間終了。返回值為WAIT_TIMEOUT。

3. 如果一個擁有mutex(互斥器)的線程結束前沒有釋放mutex,則傳回 WAIT_ABANDONED。(abandoned:廢棄)

獲得一個線程對象的 handle之后,WaitForSingleObject()要求操作系統讓線程 #1 睡眠,直到以下任何一種情況發生:

1. 線程#2結束

2. dwMilliseconds時間終了。該值系從函數調用后開始計算。

由于操作系統持續追蹤線程#2,即使線程#2 失事或被強迫結束,WaitForSingleObject()仍然能夠正常運作。

如果想一直等待某個線程,直到線程退出,可以用如下代碼:

WaitForSingleObject( hThrd, INFINITE );

關于time-out,有一個特別重要的用途,但很少被人注意。設定time-out為0,能夠檢查handle的狀態并立刻返回,沒有片刻停留。如果handle已經備妥,那么這個函數會成功并傳回 WAIT_OBJECT_0。否則,這個函數立刻返回并傳回 WAIT_TIMEOUT。

另外可以利用 time-out提供一個動畫,表示正在等待某個線程的結束。可以每 500毫秒就time-out一次,更新圖示,然后再繼續等待。

WaitForSingleObject()可以面對許多種 handles工作,不一定非要是的線程 handle。事實上,Win32中大部分以HANDLE表示的對象都能夠作為 WaitForSingleObject()的等待目標。視所擁有的對象不同,操作系統等待的事情也不一樣。形式上來說,系統等待著這一對象“被激發”。

【學習資料】 《Win32多線程程序設計》

總結

以上是生活随笔為你收集整理的等待一个线程的结束的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。