使用Control.Concurrent和forkIO會導致線程處於阻塞狀態(這在網絡連接的windows下尤其頻繁),所以即使嘗試使用killThread,異常也不會在線程中提出。 是否有任何其他方式強制線程死亡?如何殺死Haskell中的線程
我試圖從helper線程中用exitFailure終止整個應用程序,在這些條件下沒有任何效果。
光榮格拉斯哥Haskell的編譯系統,版本6.12.1 HP 2010.1.0.0
編輯:爲了澄清事實,我不想終止應用程序,我希望只殺死線程已經被封鎖了很長時間。 但是,即使在這裏,也有很多例子,在輔助線程中使用exitWith的完整代碼,並且這種方案在我所擁有的條件下不起作用。
你有個例子嗎?除了被外界阻止之外,你在想什麼? – 2011-05-31 11:39:18
我大概可以創建一個小例子,但在windows7/vista/2003/2008/2008r2下使用Network-ByteString(0.1.3)和recv時,recv將阻塞,直到發生某些網絡狀況。我想只是廢棄該連接並重新啓動(即超時)而不退出整個應用程序。 – Jonke 2011-06-01 07:28:07
我想要的東西唐是一個poormans主管(erlang),但使用輕量級的haskell線程。我無法更改服務器,也無法使用套接字選項來超時recv,因此需要根據其他標準計算超時時間,而這些標準在程序生命週期的最後階段纔會提供。 – Jonke 2011-06-01 07:45:13