2011-06-21 43 views
0

全部,在無限等待模式下在C#中停止線程

我有一個主線程,它創建10個線程,全部執行相同的方法。 在這個方法裏面有一個到消息隊列的連接,並且每個線程都等待一個消息直到消息到達。但是,如果我想要,我需要具有告訴線程死亡的功能。我該怎麼做 ?

下面是一個例子:

void ExecuteThread(){ 
//run some stuff 
//listen to a message queue 
//Here wait unlimited until a message arrives 
} 

如何通知上面的代碼是在無限的等待命令停止線程? 我不能放棄它,因爲我會優雅地從隊列中斷開連接。

非常感謝, MK

}

+1

你說你不能中止,但如果你的try/catch在線程方法,趕上'ThreadAbortException',做清理那裏,是不是會做的伎倆? –

+0

您使用的是哪個版本的.net? – marto

回答

0

通常你必須創建一個等待循環,檢查一個共享變量。這個變量表示線程是否必須取消它的操作。

警告:不要創建一個無限循環來檢查變量,這會導致「繁忙等待」。您應等待隊列中的消息,直到超時到達。在超時之後,您可以檢查控制變量並再次輸入隊列的等待進程。

1

不要等待無限,而是使用WaitOne超時。把它放在一個循環中,它檢查一個標誌是否被取消。然後,從你的主線程,你可以發信號線程退出。

類似的信息(僞代碼):

while (keepRunning) 
{ 
    //wait 5 seconds for message 
} 
+0

聽起來不錯...我會盡力實現它 – koumides

1

什麼樣的消息隊列?您的主線是否可以在隊列中發送自殺消息(好吧,有10封自殺消息,還是一封內部計數的自殺消息)?

RGDS, 馬丁

+0

我其實想過它,但可能不是一個非常乾淨的解決方案... – koumides

+0

它比連續超時更乾淨,更高CPU效率和更低延遲。你已經發送你的線索/消息告訴他們做什麼,那麼爲什麼與自殺請求有所不同? –