睡眠()与sleep_for()

Sleep() vs sleep_for()

有人可以解释这两种停止线程然后再继续线程的行为之间的区别吗?。

Sleep(); //from Win32

std::this_thread::sleep_for();

我在 多线程行为 方面的评论不是在系统兼容性方面。

当您像下面这样调用睡眠方法时,它会指示 O/S 在作为参数提供给 sleep() function/method 的特定时间片内暂停线程。一旦这个函数执行 O/S 暂时停止那个线程并进入睡眠状态。通过这样做 O/S 也从它(从睡眠线程)中释放微处理器,以便处理器可以分配给另一个正在等待处理器时间的线程或进程。两者之间没有任何重大区别。 Sleep() 用于 windows 并且你必须添加 windows 头文件 <windows> 和下一个,你可以在 windows 和 Unix 环境中使用并且需要使用头文件 <chrono>.

 Sleep(); //from Win32
 std::this_thread::sleep_for();

您可以像下面一样使用睡眠功能:-

 Sleep(100); //sleep for 100 m/s but only in windows    
 std::this_thread::sleep_for(std::chrono::milliseconds(100));//sleep for 100 m/s. Can be use in both windows and Unix environment

100后m/sO/S会唤醒休眠的线程,重新分配处理器给它进一步执行和操作。

区别在于sleep_for()是由C++11标准定义的,而Sleep()是由WindowsAPI定义的。如果您使用 sleep_for(),编译器很可能会在为 Windows 编译时生成调用 Sleep() 的代码,尽管不确定。然而,由于它是一个 C++11 标准函数,这意味着任何(正确地)实现 C++11 标准的编译器都将有一些方法为它所描述的任何平台的 function 所描述的功能生成代码支持。

另一个主要区别是 sleep_for()std::chrono::duration 作为参数而不是整数(以毫秒为单位)。这使您可以更轻松、更精确地指定希望线程休眠的时间。它还将一些文档信息移动到类型系统中。

您想知道 sleep_for()Sleep() 对多线程的含义,我只能说 sleep_for() 具有 C++11 标准中定义的含义,和 Sleep(),具有 Windows API 中定义的含义。如果您查看参考资料,每个人都会谈论 各自的线程类型。因此,如果您使用的是 C++11 线程,请使用 sleep_for()。如果您直接使用 Win32 线程,请使用 Sleep()Sleep() 没有任何 C++11 线程的概念,因此没有明确定义的行为。同样,sleep_for() 没有 Windows API 线程的概念,因此也没有明确定义的行为。每个函数的文档都指定了它与各自线程的交互。不要混淆标准。