我正在构建一个充当客户端的控制台应用程序。它连接到服务器的给定 IP 地址。我在其中使用Raknet。我注意到的问题之一是程序 Consoleapplicationxx.exe 占用了很高的 CPU 使用率(如任务管理器所示)。45% 以上。
所以我通过代码检查并发现 Raknet在一个 while 循环中工作。以下是我的代码(不准确。根据我的记忆)
int main(int argc, char** argv)
{
while(1)
{
for(packet->Receive();packet;packet->Deallocate(), packet->Receive()
{
switch(packet->data[0])
{
case xx:
break;
case yy:
break;
...
}
}
}
//some stuff and end
}
所以我创建了另一个控制台应用程序。下面是代码
#include <iostream>
#include <windows.h>
int main()
{
while (1)
{
}
}
当我运行这个程序时,它也使用高 CPU。然后我在 while 循环中添加了一个 Sleep(1000),cpu 使用率降低到 0%。我逐渐将睡眠时间减少到 1 毫秒
#include <iostream>
#include <windows.h>
int main()
{
while (1)
{
Sleep(1);
}
}
它运行完美(0% cpu 使用率)。(注意:我尝试将 Sleep(0) 再次设置为高 CPU 使用率 50%)那么这是解决此问题的方法吗?这样我会将 Sleep(1) 添加到我的原始程序中吗?
我计划在完成后分发该程序。所以解决问题很重要。