gpt4 book ai didi

c++ - sleep () 与 sleep_for()

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:42:02 25 4
gpt4 key购买 nike

有人可以解释这两种停止线程然后再继续的方式在行为上的区别吗?

Sleep(); //from Win32

std::this_thread::sleep_for();

我评论的是多线程行为,而不是系统兼容性。

最佳答案

区别在于sleep_for()是由C++11标准定义的,而Sleep()是由Windows API定义的。如果您使用 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 线程的概念,因此也没有明确定义的行为。每个函数的文档都指定了它与各自线程的交互。不要混淆标准。

关于c++ - sleep () 与 sleep_for(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49071285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com