如何给C ++程序添加定时延迟?
我试图在C ++程序中添加一个定时延迟,并想知道是否有人对我可以尝试或可以看到的信息有什么build议?
我希望我有更多的细节,我如何实现这个时间延迟,但直到我有更多的信息如何添加定时延迟我不知道我甚至应该尝试实现这一点。
Win32: Sleep(milliseconds)
是什么
unix: usleep(microseconds)
就是你想要的。
睡眠()只需要几秒钟,通常太长。
一个更新的答案C ++ 11:
使用sleep_for
和sleep_until
函数:
#include <chrono> #include <thread> int main() { using namespace std::this_thread; // sleep_for, sleep_until using namespace std::chrono; // nanoseconds, system_clock, seconds sleep_for(nanoseconds(10)); sleep_until(system_clock::now() + seconds(1)); }
有了这些function,就不再需要不断地添加新的function,以获得更好的分辨率: sleep
, sleep
, sleep
等sleep_for
和sleep_until
是模板函数,可以通过chrono
types接受任何分辨率的值; 小时,秒,飞秒等
在C ++ 14中,你可以进一步简化代码的文字后缀为nanoseconds
和seconds
:
#include <chrono> #include <thread> int main() { using namespace std::this_thread; // sleep_for, sleep_until using namespace std::chrono_literals; // ns, us, ms, s, h, etc. using std::chrono::system_clock; sleep_for(10ns); sleep_until(system_clock::now() + 1s); }
请注意,睡眠的实际持续时间取决于实现:您可以要求睡眠10纳秒,但实现可能最终会在一毫秒内hibernate,如果这是最短的时间。
#include <unistd.h> usleep(3000000);
这也会睡三秒钟。 你可以稍微改进一下数字。
请注意,这并不能保证线程hibernate的时间将接近hibernate期,只能保证线程继续执行之前的时间至less是所需的数量。 实际的延迟将根据情况而变化(尤其是在所讨论的机器上的负载),并且可能比期望的睡眠时间高几个数量级。
另外,你并没有列出你为什么需要睡觉,但是你通常应该避免使用延迟作为同步的方法。
你想要像简单的东西吗?
sleep(3);
你也可以使用select(2)如果你想要微秒的精度(这个工作在没有使用usleep的平台上)(3))
下面的代码将等待1.5秒:
#include <sys/select.h> #include <sys/time.h> #include <unistd.h>` int main() { struct timeval t; t.tv_sec = 1; t.tv_usec = 500000; select(0, NULL, NULL, NULL, &t); }
`
是的,睡眠可能是这里select的function。 请注意,传递给函数的时间是调用线程处于非活动状态的最短时间。 所以举个例子,如果你用5秒的时间睡觉,你可以保证你的线程至less睡5秒钟。 可能是6,8或50,这取决于操作系统在做什么。 (在最佳操作系统执行期间,这将非常接近5.)
睡眠函数的另一个有用的function是传入0.这将强制从您的线程上下文切换。
一些额外的信息:
http://www.opengroup.org/onlinepubs/000095399/functions/sleep.html
我发现"_sleep(milliseconds);"
(不包括引号)适用于Win32,如果您包括chrono
库
例如:
#include <chrono> using namespace std; main { cout << "text" << endl; _sleep(10000); // pauses for 10 seconds }
确保在睡觉前包含下划线。
你可以试试这个代码片段:
#include<chrono> #include<thread> int main(){ std::this_thread::sleep_for(std::chrono::nanoseconds(10)); std::this_thread::sleep_until(std::chrono::system_clock::now() + std::chrono::seconds(1)); }
句法:
void sleep(unsigned seconds);
sleep()将暂停执行一段时间(秒)。 通过调用睡眠,当前程序将暂停执行秒数指定的秒数。 间隔仅精确到百分之一秒或与操作系统时钟的准确度相符,以准确度较低者为准。
许多人已经提供了很好的睡眠信息。 我同意Wedge说睡觉很less是最合适的解决scheme。
如果你在等待某件事时正在睡觉,那么你最好等待那件事/事件。 看这个条件variables。
我不知道你在做什么操作系统,但是对于线程和同步你可以看看Boost Threading库( Boost Condition Varriable )。
如果您正在等待极短的时间,现在转到另一个极端,那么有几个黑客风格选项。 如果你正在做一些没有实现“睡眠”的embedded式平台,那么你可以尝试一个简单的循环(for / while等)空的体(小心编译器不会优化它)。 当然在这种情况下,等待时间取决于具体的硬件。 对于真的很短的“等待”,你可以尝试一个程序集“nop”。 我非常怀疑这些都是你以后的事情,但是不知道为什么你需要等待,这很难做到更具体。
在Windows上,您可以包含Windows库并使用“睡眠(0)” 睡觉的程序。 它需要一个代表毫秒的值。
在固定的时间内延迟cpp的输出,可以使用Sleep()函数,通过包含windows.h头文件语法来使Sleep()函数为Sleep(time_in_ms)为
cout<<"Apple\n"; Sleep(3000); cout<<"Mango";
输出。 上面的代码将打印苹果,并等待3秒钟之前打印芒果。