如果我使用TerminateThread
函數在Windows上終止線程,該函數返回或終止asychnronous後該線程是否真正終止?線程在調用TerminateThread時實際終止了什麼時候?
回答
定義「實際終止」。文檔說該線程不能執行更多的用戶模式代碼,所以有效:是的,它被終止了,代碼中的任何內容都不會再被該線程執行。
如果你在終止之後立即使用「WaitForSingleObject」,我想可能仍然會有一些輕微的延遲,因爲Windows正在進行清理。
順便說一句:TerminateThread是結束一個線程最糟糕的方式。嘗試使用其他一些同步手段,例如告訴線程停止的全局變量,或者例如事件。
這就是我的意思:一旦TerminateThread返回,傳遞給'CreateThread'的函數就不會執行代碼。 – Christoph
終止一個線程類似於殺死一個進程,僅在每個線程級別。它實際上可以通過在目標線程中產生(不可捕獲的)信號來實現。
結果基本相同:您的程序沒有處於任何特定的可預測狀態。死線程沒有太多可以做。程序的控制流程通常是不確定的,因此在存在線程終止的情況下推斷程序的行爲是非常困難的。基本上,除非你的線程做的事情非常狹窄,特殊和受限(例如每秒增加一個原子計數器),否則沒有好的模型來終止一個線程,並且對於程序之後的狀態線程終止。
不要這樣做。設計您的線程,以便您可以與他們溝通,並使他們的輸入功能可以返回。設計您的程序,以便您可以最終加入所有線程並對所有內容進行計算。
那麼,直到最後一段還是可以的,但是我想我們總是不同意這一點
這是一個同步調用。這並不意味着它必然會很快返回 - 如果操作系統不得不求助於使用其內核驅動程序停止線程,可能會有一些阻塞(即它實際上運行在與請求終止的線程不同的內核上)。
在應用程序運行期間(與在應用程序/進程終止期間使用它的內核截然不同),由用戶代碼調用TerminateThread存在問題,正如其他人明確所述。
我很努力地在應用程序運行期間用TerminateThread或任何其他方式永遠不會終止線程。應用程序生存期線程和線程池通常在操作系統在應用程序關閉時破壞它們之前不需要任何明確的終止。
- 1. 當我們在Unix中終止一個進程時實際發生了什麼?
- 2. 什麼時候invokedynamic實際上有用(除了懶惰常量)?
- 3. 什麼時候綁定實際發生
- 4. 什麼時候「open」命令終止?
- 5. 什麼時候Thread.Abort()不會實際中止?
- 6. 什麼時候startService()停止了服務?
- 7. 調用SIGINT時終止線程 - C
- 8. 線程終止時調用方法
- 9. 什麼時候在spring的實際應用中使用BeanFactory?
- 10. 守護線程什麼時候有用?
- 11. 什麼時候線程死在ThreadPoolExecutor中
- 12. C++異步線程在調用線程完成時終止
- 13. 進程在其父進程sshd終止時發生了什麼?
- 14. 事件調度線程實際上做了什麼?
- 15. 什麼時候調用exit_mmap?
- 16. 什麼時候調用robot.cleanUp()
- 17. 什麼時候調用setDataTimeout?
- 18. 什麼時候調用scrollIntoView()
- 19. 什麼時候調用webview.clearData
- 20. 什麼時候調用Object.wait
- 21. 什麼時候調用onSizeChanged()?
- 22. 我們什麼時候需要實際同步?我的線程自然同步
- 23. 線程終止時的Java ExecutorService回調
- 24. 爲什麼Media.SoundPlayer.Play()實際上在兩次調用時啓動兩個新線程?
- 25. 什麼時候會在函數調用堆棧中產生實際產量?
- 26. 什麼時候CopyOnWriteArraySet對實現線程安全的HashSet有用?
- 27. 爲什麼我的線程在我使用UI時停止了
- 28. 線程什麼時候退出?
- 29. 什麼時候線程安全問題?
- 30. 爲什麼在代碼調用FindByEmail()時實際調用FindByEmailAsync()
[事實上,沒有理由使用TerminateThread。只有當你精確地控制線程正在做什麼時(例如,你知道它不會執行堆分配,並且它不在關鍵部分內),它纔是安全的。但是,如果你是該線程函數的程序員,那麼爲什麼不編寫從某個事件或標誌處的線程函數安全地返回的代碼,或者在需要時調用ExitThread?](http://adilevin.wordpress.com/tag/terminatethread /) –
事實上,我知道'TerminateThread'具有的含義,但我仍然對代碼執行停止感興趣,因爲文檔沒有回答這個問題。 – Christoph