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

Dom*_*ndo 4 c++ sleep thread-sleep

我注意到有两种不同的方法可以在C++中"暂停".(虽然我认为它的正确名称是sleep.)

方法1,(可能是最熟悉的方法):

#include <iostream>
#include <unistd.h>
int main() {
  std::cout<<"Hello, "<<std::endl;
  sleep(1);
  std::cout<<"world!\n";
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我首先学到的方法:

#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;
}
Run Code Online (Sandbox Code Playgroud)

我不是问哪条路是对的,(它们都做同样的事情),而是我要问哪个更常用,或者"接受".另外,这两者在速度/性能等方面有区别吗?

小智 8

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

  • sleepfrom unistd.h是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.