目前,我正在开发一个用Visual Studio 2010或更低版本为Windows开发的旧项目(使用C和C ++)。我们希望将其更新为Visual Studio 2015或2017等新版本。
我发现_sleep()函数是no longer supported be Microsoft而我将使用Sleep()函数。
我没有为旧的_sleep()函数找到等效的documentation,我想知道两个函数是否完全相同?这个MSDN post让我想知道唯一的区别在于论证的类型吗?
提前感谢您的回答。
答案 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
因此,_sleep
和Sleep
都会显示特定的毫秒数
_sleep
是MSVC CRT函数,Sleep
是Windows API
所以在MSVC中它们应该是可以互换的。
一个小的区别是,如果0
参数,_sleep
将为1ms
休眠,而Sleep
根本不会休眠。