当使用while(1)循环时,当CPU使用率达到100%时,如何降低CPU使用率
我正在处理UDP服务器/多客户端应用程序 有多个线程处理多个客户端 有一个线程持续向每个活动客户端发送KEEPALIVE消息。由于该线程处于当使用while(1)循环时,当CPU使用率达到100%时,如何降低CPU使用率,c,windows,winapi,visual-studio-2008,while-loop,C,Windows,Winapi,Visual Studio 2008,While Loop,我正在处理UDP服务器/多客户端应用程序 有多个线程处理多个客户端 有一个线程持续向每个活动客户端发送KEEPALIVE消息。由于该线程处于状态,而(1)状态,因此CPU使用率达到100% 因为我想继续使用这个功能,所以我使用了while(1)线程。我还尝试在每次执行while时添加sleep,但我认为sleep()不会释放CPU。有什么方法可以在特定的时间内减少CPU的使用。e、 g执行一次while后,我可以释放CPU大约10秒,然后继续返回while 请帮帮我。提前多谢。请尝试int-us
状态,而(1)
状态,因此CPU使用率达到100%
因为我想继续使用这个功能,所以我使用了while(1)
线程。我还尝试在每次执行while
时添加sleep
,但我认为sleep()
不会释放CPU。有什么方法可以在特定的时间内减少CPU的使用。e、 g执行一次while后,我可以释放CPU大约10秒,然后继续返回while
请帮帮我。提前多谢。请尝试
int-usleep(useconds\u t-usec)代替睡眠代码>
对于特定于windows的线程,您可以尝试使用timeBeginPeriod/timeEndPeriod。请参阅链接—sleep
-暂停当前线程的执行,直到超时间隔结束。
并将处理器提供给准备运行的其他线程
资料来源:
所以,只要睡眠就可以了。在Linux上,我使用nanosleep(),然后使用sleep():nanosleep(&tsleep,NULL)代码>睡眠(1500)
在(1)
循环时在内部发送保持活动状态的消息是个坏主意,因为这样不仅会消耗所有的CPU时间,而且还会使网络泛滥,并使这些消息的接收者受到攻击。您可以使用Sleep()
WinAPI函数,使用合理的延迟(您建议的10秒看起来合理)暂停发送线程一段时间:
while( 1 ) {
sendKeepAlive();
Sleep( 10 * 1000 ); // 10 seconds
}
Sleep()
肯定会挂起您的线程,当线程挂起时不会占用CPU时间。Sleep()
会存储上下文+放弃CPU以节省资源,减少CPU使用的一种方法是限制线程数,最好的方法是在执行之前保留一个等待列表谢谢大家的帮助:)谢谢大家的帮助:)这在Windows上也可用吗?是的,在Windows上有一个睡眠(毫秒)
功能(在Windows.h中)。@RogerRowland是的,你是对的,Windows中没有usleep,但是对于特定于windows的用户可以浏览此链接,我认为是这样的-只是OP标记了windows。@RogerRowland我已经按照您的建议编辑了我的答案。希望它对OP有所帮助
while( 1 ) {
sendKeepAlive();
Sleep( 10 * 1000 ); // 10 seconds
}