2011-06-21 44 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效率和更低延迟。你已经发送你的线索/消息告诉他们做什么,那么为什么与自杀请求有所不同? –