c++ - pthread休眠函数,cpu消耗

标签 c++ pthreads sleep cpu-usage

代为抱歉,我的英语不够完美。

我最近用 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 总是在检查时间是否过去了。我试过做这样的事情: 而(时钟()<结束等待) sleep (200); 但是当函数 usleep(和 sleep 也)接缝卡住时钟增量时(在 usleep 之后它总是一个常数值)。

是否有任何解决方案、现成的函数(如 phread_sleep(20ms))或解决我的问题?也许我应该以某种方式访问​​主时钟?

这里它不是那么重要,我几乎可以检查状态检查的执行花了多长时间(之前锁存 clock(),与之后比较),并计算要作为参数传递给 usleep 函数的值。但在其他线程中,我想使用这种形式。

usleep 是否正在卡住整个过程?

我目前正在Cygwin 上调试它,但不认为问题出在这里。

非常感谢您的任何回答和建议。

J.L.

最佳答案

如果它不需要恰好是 1,那么请稍等片刻。 usleep 和 sleep 将当前线程置于有效等待状态,该状态至少是您请求的时间量(然后它有资格再次被调度)。

如果您不想接近准确时间,则无需检查 clock()。

关于c++ - pthread休眠函数,cpu消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7830243/

相关文章:

operating-system - 具有相同 guest 操作系统、不同主机操作系统的 VMWare 上的线程同步行为

python - python脚本中的os.system命令导致错误

c++ - 谷歌 Protocol Buffer : Recommended C++ library to handle the communication?

android - Android 中的进程共享互斥量和条件变量

linux - 在C中使用互斥锁使用2个线程打印奇数和偶数

c - 间隔计时器未在指定时间间隔触发信号

c# - ASP.NET c# 中 System.Threading.Timer 和 Thread.Sleep() 的区别

c++ - MFC 是否仅适用于 Visual Studio 而不是 Visual C++ Express?

c++ - 我可以在 Armadillo 中实例化矩阵,然后在后面的代码行中将其设置为使用辅助内存吗?

c++ - 智能指针和参数列表分配规则