代表,对不起,我的远非完美的英语。pthread睡眠功能,cpu消耗
我最近用C++编写了我自己的Linux恶意软件(确切的说是OpenWRT路由器),并且我遇到了问题。
那里有很少的线程,每个打开的TCP连接一个,主线程等待新的TCP连接,并且,正如我所说的,指挥官线程检查状态。
每件事情都很好,但我的CPU总是100%。我现在是因为指挥官的代码:
void *CommanderThread(void* arg)
{
Commander* commander = (Commander*)arg;
pthread_detach(pthread_self());
clock_t endwait;
while(true)
{
uint8_t temp;
endwait = clock() + (int)(1 * CLOCKS_PER_SEC);
for(int i=0;i<commander->GetCount();i++)
{
ptrRelayBoard rb = commander->GetBoard(i);
if (rb!= NULL)
rb->Get(0x01,&temp);
}
while (clock() < endwait);
}
return NULL;
}
正如你可以看到程序每隔1秒做一些东西。时间在这里并不重要。我知道CPU一直在检查时间过去了。我试过做这样的事情: while(clock()< endwait) usleep(200); 但是,当函数休眠(和睡眠也)缝冻结时钟增量(它总是一个恒定的值后,休眠)。
是否有任何解决方案,准备就绪的功能(如phread_sleep(20ms)),或为我的问题四处走动?也许我应该以某种方式访问主时钟?
这里它并不那么重要,我可以检查状态检查的执行花了多长时间(先锁住clock(),然后再比较),然后计数该值作为usleep函数的参数。但在其他线程中,我想使用这种形式。
睡眠是否让整个过程冻结?
我目前正在Cygwin上调试它,但不认为问题出在这里。
感谢您的任何答案和建议,非常感谢。
J.L.
没错。只需用'sleep(1);'替换'while()'循环。 – caf