睡眠()与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 线程的概念,因此也没有明确定义的行为。每个函数的文档都指定了它与各自线程的交互。不要混淆标准。
有人可以解释这两种停止线程然后再继续线程的行为之间的区别吗?。
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 线程的概念,因此也没有明确定义的行为。每个函数的文档都指定了它与各自线程的交互。不要混淆标准。