Использование процессора на 100% с сервером чата, созданным с использованием потоков C#

У меня есть чат-сервер, созданный с помощью Threads, он работает хорошо, и у меня подключено 5 клиентов, но загрузка ЦП увеличивается со временем до 100%! Зонд поставил Thread.Sleep (30000), но проблему не решил, вот код при подключении нового клиента

public void StartListening()
    {

            // Get the IP of the first network device, however this can prove unreliable on certain configurations
            IPAddress ipaLocal = ipAddress;

            // Create the TCP listener object using the IP of the server and the specified port
            tlsClient = new TcpListener(ipaLocal, 1986);

            // Start the TCP listener and listen for connections
            tlsClient.Start();

            // The while loop will check for true in this before checking for connections
            ServRunning = true;

            // Start the new tread that hosts the listener
            thrListener = new Thread(KeepListening);
            thrListener.Start();


    }

    private void KeepListening()
    {
        // While the server is running
        while (ServRunning == true)
        {
            // Accept a pending connection

            tcpClient = tlsClient.AcceptTcpClient();
            // Create a new instance of Connection
            Connection newConnection = new Connection(tcpClient);

            Thread.Sleep(30000);
        }
    }
}

2 ответа

AcceptTcpClient это блокирующий вызов, поэтому нет причин для вызова Thread.Sleep:

AcceptTcpClient - это метод блокировки, который возвращает TcpClient, который можно использовать для отправки и получения данных.

Я думаю, что ваша проблема 100% загрузки ЦП может быть в другом месте в вашем приложении.

Используйте асинхронную версию AcceptTcpClient с именем BeginAcceptTcpClient. Документы для BeginAcceptTcpClient с примером кода доступны здесь.

Другие вопросы по тегам