首頁>Club>
8
回覆列表
  • 1 # ad1221

    1)介面最好是放在一個執行緒中進行統一管理。

    2)介面最好讓主執行緒來管理3)在MFC中,如果主介面收到WM_QUIT,即意味著要關閉視窗,那麼主執行緒也就退出/返回/return了。4)主執行緒退出,其他輔助執行緒不管有沒有執行完成,都會因為主執行緒的退出而退出,主執行緒退出也就意味著程序結束了。樓主說的還不夠精確。我的理解是:工作執行緒進行計算,主執行緒的主介面不負責顯示工作進度,只要有工作執行緒,主介面應該建立一個介面來顯示工作執行緒的工作進度,如果工作執行緒完成了,進度顯示介面也應該消失。如果是這樣的邏輯,可以這樣佈局:1)專門定義一個進度介面的視窗類,為了能與工作執行緒進行交流,需要為這個進度介面視窗類定製各種自定義訊息,並且該類的視窗例項應該作為主介面的子視窗,這樣做是當主介面被關閉,作為子視窗也會被關閉。2)工作執行緒應該由主介面建立,進度介面也由主介面建立。

    3)工作執行緒彙報工作進度,主介面不干預,彙報工作直接在工作執行緒與進度介面之間透過自定義訊息實現。

    4)工作執行緒需要return前給主介面傳送即將完成訊息。

    5)所有執行緒都有“完成訊號”狀態,即執行緒在執行時,處於無訊號狀態,執行緒完成退出,處於有訊號狀態。不熟悉可以看下“系統程式設計”有關內容。利用該特性,主執行緒在收到工作執行緒發來的即將完成訊息後,呼叫WaitForSingleObject,將自己臨時阻塞,阻塞會造成主介面無法響應使用者滑鼠鍵盤訊息,形成假死狀態。但這種情況幾乎看不到。主執行緒收到工作執行緒訊息才呼叫WaitForSingleObject,才會阻塞,但工作執行緒這個時候基本上已經退出了,因此WaitForSingleObject幾乎沒有等待就返回了,因此主介面被阻塞的估計值是小於1秒鐘。即使是最壞的情況下,多個工作執行緒同時完成,主介面需要依次呼叫WaitForSingleObject,也不會有問題。6)WaitForSingleObject返回了,標誌工作執行緒結束工作,主介面就可以安全地關閉進度介面視窗。

  • 中秋節和大豐收的關聯?
  • 我們是孽緣嗎、。還是一種不可磨滅緣分?