首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

空周转的后台程序为什么耗掉了25%的CPU

2012-08-13 
空运转的后台程序为什么耗掉了25%的CPU?刚写了一个后台程序,为什么比窗体程序耗的资源多那么多?调用的都是

空运转的后台程序为什么耗掉了25%的CPU?
刚写了一个后台程序,为什么比窗体程序耗的资源多那么多?调用的都是同样的功能,即使后台程序就一个空的while就耗掉了25%的CPU 正常吗?

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
while(true)
{

}

return 0;
}

[解决办法]
这是busy loop,不是空转哦。
[解决办法]
才25%?
[解决办法]
你得睡眠,而不是while(true) xxxx。
比如linux kernel中的 schedule msleep
[解决办法]
循环内加上Sleep(15);
[解决办法]
你得让程序干点事,这样死循环还不如不运行
[解决办法]
死循环占用整个线程
哪怕你什么代码都没写,死循环就是死循环
[解决办法]
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
thread1->start();
thread2->start();
while(ThreadNotStop)
{
Sleep(15);
}

return 0;
}
[解决办法]
while(ture)
线程会获取CPU时间片,除非它被其他线程抢占,但是抢占后又会获得CPU时间片,这样会浪费宝贵的CPU时间~
[解决办法]

探讨
循环内加上Sleep(15);

[解决办法]
单核就100%了,程序直接卡死掉。
[解决办法]
应该跑4个线程,这样你就记忆深刻了
[解决办法]
把线程提升到实时优先级, 然后开十个八个的这样的空while印象会深刻些...
[解决办法]
探讨

把线程提升到实时优先级, 然后开十个八个的这样的空while印象会深刻些...

[解决办法]
这个线程不会让出CPU。应该sleep(0)。
这样,至少让内核有一个线程切换的机会。


[解决办法]
while里加sleep(0)
[解决办法]
因为你是用的4核的CPU,1/4就是25%,所以耗掉了25%的CPU
[解决办法]
你到底想干什么,啥事不干就Sleep(-1)
[解决办法]
那主线程就等待这两个线程结束,然后做清理工作
[解决办法]
探讨

我的意思是这样

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
while(true)
{
thread1->start();
thread2->start();
然后可以一直sleep()直到两个线程结束?
}……

热点排行