目前,我正在开发一个用Visual Studio 2010或更低版本开发的Windows(C和C++)旧项目.我们想为Visual Studio 2015或2017等新版本更新它.
我发现Microsoft不再支持 _sleep()函数,而是我将使用Sleep()函数.
我没有找到旧的_sleep()函数的等效文档,我想知道两个函数是否完全相同?这篇MSDN帖子让我想知道唯一的区别在于参数的类型是什么?
提前感谢您的回答.
正如 RbMm 所提到的,_sleep
已经作为一个非常薄的包装器实现了Sleep
:
void __cdecl _sleep(unsigned long dwDuration)
{
if (dwDuration == 0) {
dwDuration++;
}
Sleep(dwDuration);
}
Run Code Online (Sandbox Code Playgroud)
为了确认,我们可以测试一下。幸运的是,它很容易测试:
#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";
}
Run Code Online (Sandbox Code Playgroud)
输出:
void __cdecl _sleep(unsigned long dwDuration)
{
if (dwDuration == 0) {
dwDuration++;
}
Sleep(dwDuration);
}
Run Code Online (Sandbox Code Playgroud)
所以它同时出现_sleep
和Sleep
睡眠特定的毫秒数。
_sleep
是一个 MSVC CRT 函数,Sleep
是一个 Windows API。
所以在 MSVC 中,它们应该是可以互换的。
一个细微的区别是,在发生0
争吵时,会_sleep
睡觉,1ms
而Sleep
根本不会睡觉。