工作者線程和用戶界面線程?
1)界面最好是放在一個線程中進行統一管理。
2)界面最好讓主線程來管理3)在MFC中,如果主界面收到WM_QUIT,即意味著要關閉窗口,那么主線程也就退出/返回/return了。4)主線程退出,其他輔助線程不管有沒有執行完成,都會因為主線程的退出而退出,主線程退出也就意味著進程結束了。樓主說的還不夠精確。我的理解是:工作線程進行計算,主線程的主界面不負責顯示工作進度,只要有工作線程,主界面應該創建一個界面來顯示工作線程的工作進度,如果工作線程完成了,進度顯示界面也應該消失。如果是這樣的邏輯,可以這樣布局:1)專門定義一個進度界面的窗口類,為了能與工作線程進行交流,需要為這個進度界面窗口類定制各種自定義消息,并且該類的窗口實例應該作為主界面的子窗口,這樣做是當主界面被關閉,作為子窗口也會被關閉。2)工作線程應該由主界面創建,進度界面也由主界面創建。
3)工作線程匯報工作進度,主界面不干預,匯報工作直接在工作線程與進度界面之間通過自定義消息實現。
4)工作線程需要return前給主界面發送即將完成消息。
5)所有線程都有“完成信號”狀態,即線程在運行時,處于無信號狀態,線程完成退出,處于有信號狀態。不熟悉可以看下“系統編程”有關內容。利用該特性,主線程在收到工作線程發來的即將完成消息后,調用WaitForSingleObject,將自己臨時阻塞,阻塞會造成主界面無法響應用戶鼠標鍵盤消息,形成假死狀態。但這種情況幾乎看不到。主線程收到工作線程消息才調用WaitForSingleObject,才會阻塞,但工作線程這個時候基本上已經退出了,因此WaitForSingleObject幾乎沒有等待就返回了,因此主界面被阻塞的估計值是小于1秒鐘。即使是最壞的情況下,多個工作線程同時完成,主界面需要依次調用WaitForSingleObject,也不會有問題。6)WaitForSingleObject返回了,標志工作線程結束工作,主界面就可以安全地關閉進度界面窗口。