如果在Windows XP操作系統上運行父線程的子線程,是否也終止父線程終止其子線程?WindowsXP上的線程
回答
不,除非父線程是應用程序的主線程。
在記錄信息方面,Windows中沒有「父線程」這樣的東西。甚至沒有嚴格的「父進程」的概念--Windows不記錄創建者進程,只記錄繼承了屬性和句柄的進程。所以答案是否定的。
編輯:一個例子應該說清楚:你可以在另一個進程中創建一個線程,而不僅僅是你自己的。顯然,線程終止時線程不會終止。
否 - 線程屬於一個進程,而不屬於其他線程。如果創建它們的線程終止,線程不會終止。
線程終止時:
- 線程功能退出(正常或通過一個例外)。
- 線程調用ExitThread或另一個結束線程的函數。
- 任何線程都使用正在討論的線程的ID來調用TerminateThread函數。
- 該過程結束。
很好的答案,除了最後一個項目。閱讀我對jrbjazz的回答的評論。當所有線程退出時,該進程被認爲是「終止」,而不是相反。如果可以的話,我還想做出另一個評論:ExitThread只是TerminateThread的一個包裝。所以線程只有一種退出方式,那就是通過TerminateThread。 – wj32 2010-01-12 11:20:19
@ wj32 - 關於最後一點,我正在考慮在線程所屬的進程上調用「TerminateProcess」。 – 2010-01-12 11:46:59
啊是的。但在內核中,您可以看到NtTerminateProcess只是終止進程的線程;) – wj32 2010-01-12 11:53:33
從的CreateThread()Windows API函數的MSDN描述:
「線程對象仍保留在系統中,直到線程終止,所有的句柄它已通過對CloseHandle的調用關閉。 「
我對CreateThread的工作原理的理解是,您基本上要求Windows生成一個線程併爲您希望線程調用的函數分配一個指針。當這個過程完成後,你「禮貌地」告訴Windows你不再需要這個線程。
所以,我想這一切都歸結到應用程序的寫法。使用提供線程包裝的有用的開發語言將消除很多不確定性,特別是如果通過對象提供線程並在應用程序終止時收集適當的垃圾。
就操作系統而言,我同意「wj32」本身確實沒有主線程,但我猜應用線程本身可以被看作概念上的「主線程」,提供應用程序適當地管理線程資源分配。
我想添加終止!=線程對象已釋放。一個線程對象可以在終止之後繼續運行,並且不會影響進程的生命週期(儘管它也可以確保進程對象掛起)。 – wj32 2010-01-12 11:31:01
- 1. WindowsXP上的pyBluez的RSSI
- 2. WindowsXP上的JavaFX錯誤
- 3. 對WindowsXP的
- 4. SaveFileDialog在WindowsXP上靜默地崩潰WinForms應用程序
- 5. Adobe本土Air應用程序在Windows7上工作,但不在WindowsXP上?
- 6. long long int在windowsxp和windows7
- 7. 無法從WindowsXP上的子文件夾加載庫
- 8. Ruby DevKit不適用於WindowsXP上的RedCloth和其他寶石
- 9. mono.exe不是有效的Win32應用程序(WindowsXP)
- 10. 用於WindowsXP的QT小部件
- 11. 線程上的CheckPixelColor
- 12. GPU上的線程
- 13. Android上的線程
- 14. FileSystemWatcher的線程上
- 15. Windows上的線程
- 16. 無法獲取Apache2.2.17在WindowsXP上加載PHP5.3.5請幫忙!
- 17. Java線程回調線程上下文
- 18. 截屏不凍屏。 C#和WindowsXP
- 19. 大廈iPhone針對WindowsXP使用Cygwin
- 20. servicemix上的CAMEL線程鎖
- 21. 非UI線程上的DispatcherObject
- 22. Python上的線程問題
- 23. android上的線程轉儲
- 24. 工作線程上的MessageBox
- 25. Android:線程上的NetworkOnMainThreadException
- 26. EC2上的Python多線程?
- 27. asp.net上的多線程
- 28. 同步線程上的NullPointerException
- 29. 線程上的Python Sounddevice.play()
- 30. Windows上的C11線程
不,沒有「主線程」的概念。 – wj32 2010-01-12 11:08:12
在Windows上,存在主線程或主線程的概念。檢查http://msdn.microsoft.com/en-us/library/ms682425(VS.85).aspx – jrbjazz 2010-01-12 11:12:58
擴展我以前的評論:在Windows進程中,生命週期完全由它的線程決定 - 這個過程被認爲是當其最後一個線程終止時「終止」。 CreateProcess的文檔說「主線程」,因爲CreateProcess創建一個進程*和*一個初始線程,因爲這是有道理的。事實上,您可以使用NtCreateProcess創建一個沒有線程的進程。但我在這裏進入了太多低級細節。 – wj32 2010-01-12 11:13:45