睡眠() vs _sleep() 函数

Sleep() vs _sleep() functions

本文关键字:函数 sleep vs 睡眠      更新时间:2023-10-16

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

我发现Microsoft不再支持_sleep()函数,我将使用Sleep()函数。

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

提前感谢您的回答。

正如 RbMm 所提到的,_sleep 已经实现为围绕 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 << " msn";
}

输出:

_sleep took 250 ms, Sleep took 250 ms

因此,它看起来_sleepSleep在特定毫秒数内处于睡眠状态。
_sleep是MSVC CRT函数,Sleep是Windows API。
因此,在 MSVC 中,它们应该是可互换的。

一个微小的区别是,在0争论的情况下,_sleep睡了1ms,而Sleep根本不睡觉。