Запуск моей функции прослушивания в отдельном потоке, похоже, потребляет много ресурсов процессора
Считается ли нормальным использовать Задержки, чтобы уменьшить использование процессора, или я использую все потоки неправильно?
// Running in a seperate Thread
void Server::listen()
{
while (m_running)
{
if (SDLNet_UDP_Recv(m_socket, m_packet) > 0)
{
//Handle Packet Function
}
}
}
Это неблокирующий вызов, то есть, если нет данных, готовых к приему, функция вернется.
Это означает, что если нечего получить, то SDLNet_UDP_Recv
вернется сразу с 0
и ваш цикл будет повторяться и вызывать SDLNet_UDP_Recv
снова, который возвращается 0
и так далее. Этот цикл никогда не остановится, поэтому он будет использовать как можно больше ресурсов процессора.
Возможное решение действительно добавить некоторую задержку или сон в цикле.
Я бы предложил что-то вроде
while (m_running)
{
int res;
while (m_running && (res = SDLNet_UDP_Recv(...)) > 0)
{
// Handle message
}
if (res < 0)
{
// Handle error
}
else if (m_running /* && res == 0 */)
{
// Small delay or sleep
}
}
Других решений пока нет …