目前,我正在处理一个使用 Visual Studio 2010 或更低版本为 Windows 开发(使用 C 和 C++)的旧项目。我们希望将其更新为更新版本,例如 Visual Studio 2015 或 2017。
我发现 _sleep()
函数是 no longer supported by Microsoft而我将使用 Sleep()
功能。
我没有找到等效的 documentation对于旧的 _sleep()
函数,我想知道这两个函数的行为是否完全相同?这MSDN post让我想知道是否唯一的区别在于参数的类型?
预先感谢您的回答。
最佳答案
正如 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 了特定的毫秒数。
_sleep
是一个 MSVC CRT 函数,Sleep
是一个 Windows API。
所以在 MSVC 中,它们应该可以互换。
一个小区别是,在 0
参数的情况下,_sleep
会休眠 1ms
而 Sleep
不会根本睡不着。
关于c++ - Sleep() 与 _sleep() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49410616/