代表,对不起,我远非完美的英语。
我最近写了我的自我用于Linux的恶魔(确切的OpenWRT路由器)在C ++中,我来到了问题。
那么有几个线程那里,每一个打开的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一直做检查经过的时间。 我试着做做这样的事情:而(时钟()<endwait)usleep(200); 但是在函数usleep(和睡眠也)缝冻结时钟增量(它总是usleep后的恒定值)。
是否有任何解决方案,准备功能(如phread_sleep(20毫秒)),或走动我的问题? 也许我应该以某种方式进入主时钟?
在这里它不是那么重要我几乎可以(前锁定时钟(),与之后相比)检查多久做的状态执行了检查,并计算值把作为参数传递给usleep功能。 但在其他线程,我想用这种形式。
不要usleep是把整个过程冻结?
我目前正在调试它在Cygwin,但不认为问题就出在这里。
感谢您的任何答案,并建议其大加赞赏。
JL