我會先說我在解決多線程問題方面沒有太多的經驗。所以我所讀到的很多有關調試競態條件,死鎖,活鎖等的內容對我來說都是嚴格理論的。主線程終止後進程繼續運行?
我有這個.NET應用程序正在使用動態加載的本機win32 dll。如果dll從未加載,則應用程序終止而不會出現問題。但是,如果dll被加載,那麼當用戶退出應用程序時,UI將消失,但該過程不會終止。
我已經打開項目設置中的本地代碼調試,所以我可以看到所有正在運行的線程。當用戶關閉應用程序窗口時,主線程似乎終止。我知道這一點,因爲如果我在Visual Studio的線程窗口中執行Break All,主線程會被重新歸類爲工作線程,並且沒有可用的調用棧。還有20個其他線程仍處於活動狀態,全部都有調用堆棧。我已經查看了所有這些線程的調用堆棧,沒有任何東西在我身上(沒有提及任何調用堆棧中的dll)。
我可以採取哪些措施來縮小這個問題的原因?是否有任何其他工具可以幫助我們指出問題所在?
問題庫是在家裏編寫的,但所有線程都是由靜態鏈接到dll的第三方庫創建的。而不是試圖照顧第三方代碼的線程管理,它更容易使用「大錘」。 –