最近,我一直在C ++上编写一个程序,该程序pings三个不同的网站,然后根据通行证或失败,它将等待5分钟或30秒,然后再尝试。

目前,我一直在使用CTIME库和以下功能来处理我的等待。但是,根据我的CPU计,这是一个不可接受的解决方案。

void wait (int seconds)
{
   clock_t endwait;
   endwait = clock () + seconds * CLOCKS_PER_SEC;
   while (clock () < endwait) {}
}

该解决方案不可接受的原因是,根据我的CPU计,该程序在等待时,该程序的运行量为48%至50%。我有一个Athlon 64 x2 1.2 GHz处理器。我的谦虚130线程序甚至不应该获得50%的范围。

如何编写等待功能更好,以便仅使用最少的资源?

有帮助吗?

解决方案

要保持便携式您可以使用 boost ::线程 睡觉:

#include <boost/thread/thread.hpp>

int main()
{
    //waits 2 seconds
    boost::this_thread::sleep( boost::posix_time::seconds(1) );
    boost::this_thread::sleep( boost::posix_time::milliseconds(1000) );

    return 0;
}

其他提示

使用C ++ 11标准,可以使用以下方法:

std::this_thread::sleep_for(std::chrono::milliseconds(100));
std::this_thread::sleep_for(std::chrono::seconds(100));

或者 sleep_until 可用于。

采用 睡觉 而不是循环时空的。

只是要解释发生的事情:当您调用clock()您的程序再次检索时间:您要它尽可能快地做到这一点,直到达到末期...它使运行程序的CPU核心“旋转” “尽可能快地通过您的循环,阅读数百万次的时间,希望它能滚动到末日。相反,您需要告诉操作系统您想在间隔后醒来...然后他们可以暂停您的程序并让其他程序运行(或系统闲置)...这就是其他各种睡眠功能答案是为了。

windows.h, *nix上有unistd.h的睡眠。

有一个更优雅的解决方案 @ http://www.faqs.org/faqs/unix-faq/faq/part4/section-6.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top