2010-08-10 71 views
1

根據我的經驗,當主線程準備退出時,它應該等到其他線程正常退出。如果線程處於未知狀態,爲什麼不能終止進程?

但是從這個鏈接http://msdn.microsoft.com/en-us/library/ms686722(v=VS.85).aspx,它看起來什麼時候進程終止,所有相關的資源被釋放,所以如果某個工作線程工作繁重,等待可能會更長。我可以忽略等待嗎?

另外,在上面的鏈接,我發現

,不要終止進程,除非其 線程都在已知狀態。如果 線程正在等待內核對象 ,它將不會被終止,直到 等待完成。這可能會導致 應用程序掛起。

這太短,無法理解爲什麼當進程退出時,在未知狀態下殺死線程是錯誤的。

有人能給我更詳細的問題嗎?

感謝

回答

0

所以,當一個線程對象在內核中等待,也不會退出,直到等待結束。

所以,讓我們說你有3個線程的應用程序,在以下狀態:

  • 一個線程等待一個內核

    1. 主線程,當前空閒
    2. UI處理線程,目前閒置對象

    如果殺死進程,線程2將會死亡,從而導致UI輸入處理程序死機,並因此顯示應用程序沒有響應(掛起)。在線程#3完成等待內核之前,主線程不會退出,因此進程仍在運行,並且進程資源不會被釋放。

    所以,我覺得它基本上說,這是更好地讓一個進程正常退出,而不是向它發送kill信號,因爲你可以讓自己陷入像描述的情況,如果任何進程的線程都在等待在內核對象上。

  • 相關問題