[英]Pausing in C++ - Which Method?
我注意到有两种不同的方法可以在C ++中“暂停”。 (虽然我认为它的正确名称是sleep
。)
方法1,(可能是最熟悉的方法):
#include <iostream>
#include <unistd.h>
int main() {
std::cout<<"Hello, "<<std::endl;
sleep(1);
std::cout<<"world!\n";
return 0;
}
我首先学到的方法:
#include <iostream>
#include <thread>
#include <chrono>
int main() {
std::cout<<"Hello, "<<std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout<<"world!\n";
return 0;
}
我不是问哪条路是对的 ,(它们都做同样的事情),而是我要问哪个更常用 ,或者“接受” 。 另外,这两者在速度/性能等方面有区别吗?
这两种方法的区别在于可移植性:
来自unistd.h
sleep
是C POSIX库的一部分,因此只能在提供POSIX-API的系统上使用(例如Linux,BSD,...),但不能在Windows上使用
std::this_thread::sleep_for
是C ++标准库的一部分(自C ++ 11以来),因此可在支持C ++ 11及更高版本的所有平台上使用
如果您可以选择使用std::this_thread::sleep_for
仅依赖于C ++ 11实现而不依赖于System API。
主要差异:
std::this_thread::sleep_for
是一个标准函数(自C ++ 11以来)。 sleep
是POSIX标准函数,因此仅在支持POSIX的系统上可用。 sleep
参数的单位是秒,而std::this_thread::sleep_for
允许使用任何std::chrono::duration
std::this_thread::sleep_for
std::chrono::duration
(尽管用于测量的时钟将具有自己的粒度,可能不如时间精确你指定的)。 std::this_thread::sleep_for
的行为未定义与可能会干扰程序流的信号有关。 通常情况下, std::this_thread::sleep_for
会像sleep
那样过早地中断,但是没有简单的方法可以找出剩下多少时间来睡觉。 sleep
,另一方面返回剩余时间睡觉,所以很容易对付使用一个循环,休眠,直到回到睡觉的时间是零中断。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.