需要更好的等待解决方案

时间:2010-11-05 05:02:53

标签: c++ time-wait

最近我一直用C ++编写一个程序来ping三个不同的网站,然后根据传递或者失败,它会在再次尝试之前等待5分钟或30秒。

目前我一直在使用ctime库和以下函数来处理我的等待。但是,根据我的CPU仪表,这是一个不可接受的解决方案。

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

这个解决方案不可接受的原因是因为根据我的CPU表,程序在等待时运行在我CPU的48%到50%之间。我有一个Athlon 64 x2 1.2 GHz处理器。我的适度130线计划甚至不可能接近50%。

如何更好地编写我的等待函数,以便它只使用最少的资源?

5 个答案:

答案 0 :(得分:13)

为了保持便携性,您可以使用Boost::Thread进行睡眠:

#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;
}

答案 1 :(得分:6)

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

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

或者可以使用sleep_until

答案 2 :(得分:3)

使用sleep而不是空的while循环。

答案 3 :(得分:3)

只是为了解释发生了什么:当你调用clock()时,你的程序会再次检索时间:你要求它尽可能快地执行它直到它到达结束时间...这使得CPU核心运行程序“旋转”尽可能快地通过你的循环,每秒读取数百万次的时间,希望它已经延伸到结束时间。您需要告诉操作系统您希望在一段时间后被唤醒...然后他们可以暂停您的程序并让其他程序运行(或系统空闲)...这就是其他程序中提到的各种睡眠功能答案是为了。

答案 4 :(得分:0)

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

@ http://www.faqs.org/faqs/unix-faq/faq/part4/section-6.html

有一个更优雅的解决方案