需要更好的等待解决方案吗 最近我一直在编写一个程序,用C++来处理三个不同的网站,然后依赖于通过或失败,在它再次尝试之前,它将等待5分钟或30秒。

需要更好的等待解决方案吗 最近我一直在编写一个程序,用C++来处理三个不同的网站,然后依赖于通过或失败,在它再次尝试之前,它将等待5分钟或30秒。,c++,time-wait,C++,Time Wait,目前我一直在使用ctime库和以下函数来处理我的等待。然而,根据我的CPU表,这是一个不可接受的解决方案 void wait (int seconds) { clock_t endwait; endwait = clock () + seconds * CLOCKS_PER_SEC; while (clock () < endwait) {} } void等待(整数秒) { 时钟等待; endwait=时钟()+秒*每秒时钟数; while(clock()

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

void wait (int seconds)
{
   clock_t endwait;
   endwait = clock () + seconds * CLOCKS_PER_SEC;
   while (clock () < endwait) {}
}
void等待(整数秒)
{
时钟等待;
endwait=时钟()+秒*每秒时钟数;
while(clock()
此解决方案不可接受的原因是,根据我的CPU表,程序在等待时以48%到50%的CPU运行。我有一个Athlon 64 x2 1.2GHz处理器。我的130行计划不可能接近50%


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

使用而不是空的while循环。

windows.h中有Sleep,on*nix中有Sleep unistd.h


有一个更优雅的解决方案@

可以让你在睡觉时随身携带:

#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;
}
#包括
int main()
{
//等待2秒钟
boost::this_线程::sleep(boost::posix_时间::秒(1));
boost::this_线程::sleep(boost::posix_时间::毫秒(1000));
返回0;
}

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

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

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

或者,
sleep\u直到可以使用
为止。

我喜欢这个主意,但是我使用的是Windows,似乎没有这个文件。Windows上也有Boost,你只需安装libs即可。或者下载一篇文章,请记住,在多线程环境中,
boost::this_thread::sleep
为代码添加了一个中断点。哇!谢谢,我不知道它可以用平台无关的便携方式完成:)是的,但时间分辨率可能不是1毫秒,而是16-17毫秒。您可能幸运地拥有100毫秒,但指定101毫秒实际上可能会导致117毫秒。对于低值,相对误差会更大,例如,指定3毫秒可能会导致17毫秒的实际睡眠时间。换句话说,秒级睡眠可接受的时间会因低毫秒级睡眠而中断。