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

Pausing in C++ - Which Method?

我注意到在 C++ 中 "pause" 有两种不同的方式。 (虽然我认为它的正确名称是 sleeping。)

方法一,(可能是大家最熟悉的方法):

#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;
}

我不是在问哪种方式正确,(他们都做同样的事情),而是我在问哪种方式更使用,或"accepted"。另外,在 speed/performance?

这样的事情上,这两者之间有区别吗?

这两种方法的区别在于可移植性:

    来自 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 实现而不依赖系统 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::this_thread::sleep_for 会像 sleep 一样被过早打断,但没有简单的方法可以找出剩余的休眠时间。 sleep 另一方面 returns 剩余的休眠时间,因此使用休眠循环很容易处理中断,直到返回的休眠时间为零。