Sleep() 未定义,但它知道 _sleep() 存在并说要使用 Sleep() 代替? C++

Posted

技术标签:

【中文标题】Sleep() 未定义,但它知道 _sleep() 存在并说要使用 Sleep() 代替? C++【英文标题】:Sleep() is undefined but it knows _sleep() exists and says to use Sleep() instead? c++ 【发布时间】:2019-11-12 17:53:56 【问题描述】:

我需要使用某种形式的 Sleep() 来让用户跟上程序的速度并观察屏幕上的东西。我在使用任何使程序停止一小段时间的命令时遇到问题,但至少现在 Sleep() 似乎是我最好的选择。我已经包含 stdlib.h 并接受 _sleep() 并且当我运行程序时它说使用 Sleep() 因为它已被新库取代。并且在 stdlib.h Sleep() 中也确实存在。我遇到了一个完全的障碍,非常感谢任何建议! (与 2017 的错误不同,因为我使用的是 2019)

代码:

void startGame() 
    //bool flag = true;
    for (int a = 0; a < 10; a++) 
        screenUpdate();
        for (int i = 0; i < 4; i++) 
            rowsShown[i]++;
        
        Sleep(500); // this comes out with an error
        //to show what the other one does
        _sleep(500);
    

错误:

Severity    Code    Description Project File    Line    Suppression State
Error (active)  E0020   identifier "Sleep" is undefined 

Severity    Code    Description Project File    Line    Suppression State
Error   C4996    '_sleep': This function or variable has been superceded by newer library or operating system functionality. Consider using Sleep instead. See online help for details.

【问题讨论】:

请将代码和错误以文字形式发布,注意图片。不是每个人都能看到图片。 怎么睡觉:***.com/questions/4184468/sleep-for-milliseconds(注意接受的答案已经过时了,c++11还有一个) 我会改用这个:https://en.cppreference.com/w/cpp/thread/sleep_for 原因是它让你的代码更便携。 未来:从“输出”窗口复制错误信息。在 VS 中经常有一些有用的信息没有显示在错误窗口中。 嗯,一个好的开始是你确定你包含了正确的标题 Sleep() 【参考方案1】:

建议包含windows.h (#include &lt;windows.h&gt;) 而不是只包含synchapi.h,因为

有很多子头文件是自动生成的 包含在 windows.h 中。其中许多文件不能简单地包含在内 由于依赖关系,它们本身(它们不是独立的)。

因此,如果您只包含synchapi.h,您可能会得到比其他identifiers are undefined 更多的E0020 错误。

Sleep 功能的使用方法可以参考“Using Thread Local Storage”示例。

如果您想要使用更小的头文件更快地构建,您可以通过排除一些不太常见的 API 声明来减小 Windows 头文件的大小。更多详细信息,请访问“Using the Windows Headers”。

【讨论】:

最好只使用std::this_thread::sleep_for(std::chrono::milliseconds500)。更便携,不需要包含windows.h

以上是关于Sleep() 未定义,但它知道 _sleep() 存在并说要使用 Sleep() 代替? C++的主要内容,如果未能解决你的问题,请参考以下文章

如何修复调用 Thread.sleep() 时未处理异常的编译错误?

C# Thread.Sleep() _PC 之间执行的其他时间

关于wait,notify,notifyall,sleep方法的思考

C#中关于Thread.sleep(1000)的问题!!

Thread.sleep 未运行 [重复]

[问答题]__sleep()