代表,對不起,我的遠非完美的英語。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