首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sleep()与_sleep()函数

Sleep()与_sleep()函数
EN

Stack Overflow用户
提问于 2018-03-21 23:39:11
回答 2查看 13K关注 0票数 8

目前,我正在做一个用C和C++开发的旧项目,是用Visual Studio2010或更低版本为视窗开发的。我们希望将其更新为更新的版本,如Visual Studio 2015或2017。

我发现_sleep()函数是no longer supported by Microsoft,我将改用Sleep()函数。

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

提前感谢你的回答。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-22 00:19:44

正如RbMm提到的,_sleep一直被implemented作为Sleep的一个非常薄的包装器

代码语言:javascript
复制
void __cdecl _sleep(unsigned long dwDuration)
{

    if (dwDuration == 0) {
        dwDuration++;
    }
    Sleep(dwDuration);

}

为了确认,我们可以对其进行测试。幸运的是,它很容易测试:

代码语言:javascript
复制
#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";
}

输出:

代码语言:javascript
复制
_sleep took 250 ms, Sleep took 250 ms

因此,_sleepSleep的睡眠时间似乎都是特定的毫秒数。

_sleep是MSVC CRT函数,Sleep是Windows API。

因此,在MSVC中,它们应该是可互换的。

一个小的区别是,在0参数的情况下,_sleep1ms睡眠,而Sleep根本不睡眠。

票数 6
EN

Stack Overflow用户

发布于 2021-12-13 00:14:04

我设法让C语言中的Sleep()函数在Visual Studio2022和Windows10/21H2上运行。添加了通用视窗平台的开发工作负载模块,还添加了Win10开发工具包。不确定是否只有SDK可以做到这一点,这是首先要尝试的东西。您可以通过将<#windows.h>添加到C代码来调用Sleep()

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49410616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档