目前,我正在做一个用C和C++开发的旧项目,是用Visual Studio2010或更低版本为视窗开发的。我们希望将其更新为更新的版本,如Visual Studio 2015或2017。
我发现_sleep()函数是no longer supported by Microsoft,我将改用Sleep()函数。
我没有找到与旧的_sleep()函数等效的documentation,我想知道这两个函数的行为是否完全相同?这个MSDN post让我想知道,唯一的区别是参数的类型吗?
提前感谢你的回答。
发布于 2018-03-22 00:19:44
正如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根本不睡眠。
发布于 2021-12-13 00:14:04
我设法让C语言中的Sleep()函数在Visual Studio2022和Windows10/21H2上运行。添加了通用视窗平台的开发工作负载模块,还添加了Win10开发工具包。不确定是否只有SDK可以做到这一点,这是首先要尝试的东西。您可以通过将<#windows.h>添加到C代码来调用Sleep()。
https://stackoverflow.com/questions/49410616
复制相似问题