退出一个永远接收数据的线程

本文关键字:数据 线程 永远 一个 退出 | 更新日期: 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,您可能希望处理它。