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

标签 c++ sleep thread-sleep

我注意到在 C++ 中有两种不同的“暂停”方式。 (尽管我认为它的正确名称是 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;
}

我不是在问哪种方式,(他们都做同样的事情),而是我在问哪个用得越多,或者“接受”。另外,在速度/性能等方面,这两者之间是否存在差异?

最佳答案

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

  • sleep 来自 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 实现而不依赖系统 API。

关于c++ - 在 C++ 中暂停 - 哪种方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53072750/

相关文章:

java - 如何在 Swing 中创建延迟

c++ - -MM 标志在 g++ 中有什么作用?

c++ - 转换指南

C++ 复制构造函数

c - 带 sleep 的简单 C 代码在执行后没有输出

c# - 如何在 while 循环中进行 sleep ?

c# - 在 C# 中 sleep 直到

c++ - 为什么我的电源运算符 (^) 不起作用?

c# - 等待按键(或)N 秒过期

java - Swing JForm 卡住直到操作完成