c++ - Sleep() 与 _sleep() 函数

标签 c++ c windows winapi

目前,我正在处理一个使用 Visual Studio 2010 或更低版本为 Windows 开发(使用 C 和 C++)的旧项目。我们希望将其更新为更新版本,例如 Visual Studio 2015 或 2017。

我发现 _sleep() 函数是 no longer supported by Microsoft而我将使用 Sleep()功能。

我没有找到等效的 documentation对于旧的 _sleep() 函数,我想知道这两个函数的行为是否完全相同?这MSDN post让我想知道是否唯一的区别在于参数的类型?

预先感谢您的回答。

最佳答案

正如 RbMm 提到的,_sleepimplemented作为 Sleep 的非常薄的包装器:

void __cdecl _sleep(unsigned long dwDuration)
{

    if (dwDuration == 0) {
        dwDuration++;
    }
    Sleep(dwDuration);

}

为了确认,我们可以测试一下。幸运的是它很容易测试:

#include <iostream>
#include <chrono>
#include <windows.h>
#include <stdlib.h>

using namespace std::chrono_literals;

int main() {
    auto tm1 = std::chrono::system_clock::now();
    _sleep(250);
    auto tm2 = std::chrono::system_clock::now();
    Sleep(250);
    auto tm3 = std::chrono::system_clock::now();
    std::cout << "_sleep took " << (tm2-tm1)/1ms << " ms, Sleep took " << (tm3-tm2)/1ms << " ms\n";
}

输出:

_sleep took 250 ms, Sleep took 250 ms

所以看起来 _sleepSleep 都 sleep 了特定的毫秒数。
_sleep 是一个 MSVC CRT 函数,Sleep 是一个 Windows API。
所以在 MSVC 中,它们应该可以互换。

一个小区别是,在 0 参数的情况下,_sleep 会休眠 1msSleep 不会根本睡不着。

关于c++ - Sleep() 与 _sleep() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49410616/

相关文章:

c++ move 窗口而不改变其大小

c++ - 什么是对象切片?

c - 将文件 a 复制到文件 b 时归档输出不正确

python - 在新的 anaconda3 安装中无法识别 jupyter notebook

c++ - Qt creator,在指定位置插入自定义菜单到菜单栏

c++ - 在boost线程中更改静态变量

c - C语言中 float 相减

c - C 中带有字符串的函数的头文件

c++ - boost::filesystem::native 路径的预期形式是什么?

python - 使用 pipe() 和 fdopen() 将数据从 Python 脚本传递到 Windows 中的 C++ 应用程序