退出一个永远接收数据的线程
本文关键字:数据 线程 永远 一个 退出 | 更新日期: 2023-09-27 17:49:38
我正试图找出如何正确退出这个线程,因为它导致我一个荒谬的数量的心痛,调用thread . abort()不是这样做的。
while(isRunning) {
Debug.Log ("Running");
while((messageFromServer = DataIN.ReadLine ()) != null) {
Debug.Log ("Message from server: " + messageFromServer);
HandlePacket(messageFromServer);
}
}
问题是,线程一直在等待来自服务器的数据,如果没有任何数据,它不会跳过它。这就是我试图用这个while()循环来完成的。
我需要设置它,以便如果没有任何数据要处理,它完成线程并再次执行,而不是等待有数据,处理它,然后结束线程。
我怎样才能有效地做到这一点?
编辑:对于那些可能会问的人,DataIN是一个StreamReader, messageFromServer是一个字符串。
您可以通过简单地返回传递给线程创建的委托来退出线程。
在这种情况下,线程将在服务器完成发送数据后立即退出。如果服务器响应不够快,你可以在底层流中添加一个超时,以防止"挂起",例如:
DataIN.BaseStream.ReadTimeout = 2000; // 2 second timeout
while((messageFromServer = DataIN.ReadLine()) != null) {
注意,当超时发生时,这可能会引发一个IOExeception
,您可能希望处理它。