繁体   English   中英

在C ++中暂停 - 哪种方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM