游戏服务器多线程错误

时间:2011-09-12 03:31:44

标签: c# multithreading

我正在为我正在创建的游戏创建一个C#服务器,并且不熟悉多线程和套接字编程。我的服务器应该能够在单独的线程中保存多个客户端。我的服务器作为控制台应用程序运行。我唯一的问题是,当我的一个测试客户端退出应用程序时,我不知道如何停止它们正在运行的线程。如何在线程运行时停止线程?

2 个答案:

答案 0 :(得分:0)

线程在其函数返回时结束。你的线程应该认识到客户端离开了你的线程循环。

答案 1 :(得分:0)

我将假设您的线程本质上是消息处理线程,它等待来自客户端的请求,然后为响应提供服务。如果是这种情况,您的线程的主循环可能看起来像下面的HandleClientRequests方法。请注意,此示例假定正常断开连接。一个强大的实现还可以解释客户端在没有执行正确的关闭序列的情况下断开连接的可能性,或者在某些时候连接失败的可能性。

public class ClientConnection {
    private Socket _socket;        

    public ClientConnection(Socket socket) {
        _socket = socket;
        new Thread(HandleClientRequests);
    }

    /* snip */

    public void HandleClientRequests() {
        bool disconnectRequested = false;
        while(!disconnectRequested) {
            var message = ReadNextMessageFromSocket();
            if(message.Type == MessageType.CloseConnection) {
                disconnectRequested = true;
            } else {
                //service request and send response
            }
        }
        ShutdownConnection();
        //after this point the thread terminates
    }
}

无论如何,你是ThreadStart方法通常应该有某种循环,你可以在其中做你想让你的线程做的任何事情,并且该循环应该有一个条件用于表示它是时候要终止的线程。