程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> mfc-如何獲線程的狀態???

mfc-如何獲線程的狀態???

編輯:編程綜合問答
如何獲線程的狀態???

MFC開發,如何獲取子線程的狀態,確保子線程只有在掛起的狀態下才會被激活?

最佳回答:


不管是Windows API還是MFC的CWinThread類都沒有給出直接獲得線程狀態的接口或函數。線程的狀態分為正在執行、掛起、已經結束三種。利用API函數GetExitCodeThread()時獲得的返回碼只能判定線程是活著的還是已經結束了,這裡“活著的”指的是正在執行或掛起狀態。那麼如果一個線程還活著,怎樣鑒別一個線程是正在執行還是正在掛起呢???令人遺憾的是,微軟沒有給出直接的接口函數。

既然WindowsAPI和MFC都沒給出直接返回線程狀態的接口函數,還好MFC裡有兩個函數SuspendThread()和ResumeThread()。
微軟給每個線程維護著一個叫做掛起次數計數器的東西,這個在上面兩個函數中有大用處。

SuspendThread()是使線程掛起,調用後,返回該次調用之前的掛起計數值,然後掛起計數值加1。如果返回為0,則表示線程原先正在執行,現在進入掛起狀態。

而ResumeThread()是使線程喚醒,調用該函數後,線程此時並不一定能擺脫掛起狀態。調用該函數後,返回該次調用之前的掛起計數值,然後掛起計數值減1,如果是原先掛起計數值已經為0則保持0值。如果返回值為1,則表示線程原先被掛起,現在轉入正在執行狀態。如果返回為0,則表示線程原先就處於正在執行狀態,現在也繼續執行。當返回值大於1時,掛起技術值減1,但線程將依舊被掛起,在這種情況下,只有繼續調用幾次該函數制止返回值為1,線程才能拜托掛起繼續執行。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved