我试图在C ++程序中添加定时延迟,并且想知道是否有人对我可以尝试的内容或可以查看的信息有任何建议?
我希望我有更多有关如何实现此定时延迟的详细信息,但是在获得有关如何添加定时延迟的更多信息之前,我不确定甚至应如何尝试执行此操作。
我试图在C ++程序中添加定时延迟,并且想知道是否有人对我可以尝试的内容或可以查看的信息有任何建议?
我希望我有更多有关如何实现此定时延迟的详细信息,但是在获得有关如何添加定时延迟的更多信息之前,我不确定甚至应如何尝试执行此操作。
Answers:
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));
}
有了这些功能也不再是一个需要不断为更好地解决增加新的功能:sleep
,usleep
,nanosleep
等sleep_for
,并sleep_until
是可通过接受任何分辨率的值模板函数chrono
类型; 小时,秒,飞秒等
在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纳秒,但是如果实现时间最短,则实现可能最终会睡眠一毫秒。
#include <unistd.h>
usleep(3000000);
这还将睡眠三秒钟。不过,您可以进一步优化数字。
您想要简单的东西吗
sleep(3);
您可以尝试以下代码片段:
#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));
}
如果需要微秒精度,也可以使用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);
}
`
是的,睡眠可能是此处选择的功能。请注意,传递给函数的时间是调用线程不活动的最短时间。因此,例如,如果您以5秒钟的时间调用sleep,则可以确保您的线程将至少休眠5秒钟。可以是6、8或50,具体取决于操作系统的功能。(在最佳OS执行期间,这将非常接近5。)
sleep函数的另一个有用功能是传入0。这将强制从线程中进行上下文切换。
一些其他信息:http :
//www.opengroup.org/onlinepubs/000095399/functions/sleep.html
若要将cpp中的输出延迟固定的时间,可以通过包含windows.h来使用Sleep()函数。Sleep()函数的头文件语法为Sleep(time_in_ms)作为
cout<<"Apple\n";
Sleep(3000);
cout<<"Mango";
输出。以上代码将打印Apple并等待3秒钟,然后再打印Mango。
此处的最高答案似乎是与操作系统相关的答案;对于更便携的解决方案,您可以使用ctime头文件编写一个快速睡眠功能(尽管对我而言这可能是一个较差的实现)。
#include <iostream>
#include <ctime>
using namespace std;
void sleep(float seconds){
clock_t startClock = clock();
float secondsAhead = seconds * CLOCKS_PER_SEC;
// do nothing until the elapsed time has passed.
while(clock() < startClock+secondsAhead);
return;
}
int main(){
cout << "Next string coming up in one second!" << endl;
sleep(1.0);
cout << "Hey, what did I miss?" << endl;
return 0;
}
许多其他人提供了很好的睡眠信息。我同意Wedge所说的睡眠很少是最合适的解决方案。
如果您在等待某事时正在睡觉,那么最好还是等待那件事。查看条件变量。
我不知道您要在哪个OS上执行此操作,但是对于线程和同步,您可以查看Boost Threading库(Boost Condition Varriable)。
如果您正试图等待异常短的时间,那么现在移到另一个极端,那么有几种hack样式选项。如果您正在某种未实现“睡眠”的嵌入式平台上工作,则可以尝试使用一个空主体进行简单循环(for / while等)(请注意编译器不会对其进行优化)。当然,在这种情况下,等待时间取决于特定的硬件。对于非常短的“等待”,您可以尝试组装“ nop”。我非常怀疑这些是您要追求的,但是却不知道为什么需要等待,很难具体说明。
在Windows上,您可以包括Windows库并使用“ Sleep(0);”。休眠程序。它采用代表毫秒的值。