Sleep()vs _sleep()函数

时间:2018-03-21 15:39:11

标签: c++ c windows

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

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

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

提前感谢您的回答。

1 个答案:

答案 0 :(得分:4)

正如RbMm所提到的那样,_sleep已经implemented作为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是MSVC CRT函数,Sleep是Windows API 所以在MSVC中它们应该是可以互换的。

一个小的区别是,如果0参数,_sleep将为1ms休眠,而Sleep根本不会休眠。