Запрос потока SDL_Net

Запуск моей функции прослушивания в отдельном потоке, похоже, потребляет много ресурсов процессора
Считается ли нормальным использовать Задержки, чтобы уменьшить использование процессора, или я использую все потоки неправильно?

// Running in a seperate Thread
void Server::listen()
{
while (m_running)
{
if (SDLNet_UDP_Recv(m_socket, m_packet) > 0)
{
//Handle Packet Function
}
}
}

0

Решение

От SDLNet_UDP_Recv ссылка

Это неблокирующий вызов, то есть, если нет данных, готовых к приему, функция вернется.

Это означает, что если нечего получить, то 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
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]