OS X 上的 C++ 中的睡眠操作

Posted

技术标签:

【中文标题】OS X 上的 C++ 中的睡眠操作【英文标题】:Sleep operation in C++ on OS X 【发布时间】:2013-10-26 16:58:55 【问题描述】:

我想以毫秒为单位执行上述操作。我应该更喜欢哪个库和函数调用?

【问题讨论】:

nanosleep(), usleep() 可能值得一看。 【参考方案1】:

编辑 2017:C++11 sleep_for 是正确的方法。请参阅Xornad's answer, below。


C++03:

由于 Mac OS X 是基于 Unix 的,您几乎总是可以只使用标准的 linux 函数!

在这种情况下,您可以使用 usleep(需要以微秒为单位的时间),只需将毫秒乘以 1000 即可获得微秒。

#include <unistd.h>
int main () 
    usleep(1000); // will sleep for 1 ms
    usleep(1); // will sleep for 0.001 ms
    usleep(1000000); // will sleep for 1 s

有关此函数的更多信息,请查看 Linux 手册页:

http://linux.die.net/man/3/usleep

【讨论】:

如果您在 OS 10.7 或更高版本上编译,请参阅下面 Xornand 的回答!使用 C++11 比使用特定于操作系统的代码更具跨平台性! 要使用 C++11 功能,您必须在 Xcode 中专门打开它。请参阅下面我对@Xornand 的回答的评论! sleep(0.001f) 将睡眠 0 秒(睡眠需要一个 int) 谢谢@cap。我已经确定了答案。 最好使用 nanosleep(),usleep() 已弃用(在 POSIX 中)。【参考方案2】:

如果您的编译器支持 C++11,则可以使用 sleep_for 并避免使用特定于操作系统的 API。 (http://en.cppreference.com/w/cpp/thread/sleep_for)

#include <thread>
#include <chrono>

int main()

    std::this_thread::sleep_for(std::chrono::milliseconds(1000));
    return 0;

【讨论】:

c++11 支持在 xcode 4.6.3 中可供我使用,但头线程不存在? 这是一个比我更好的答案! (感谢 Xornand,我从没想过要使用这些!) 但是你是对的,要让 C++11 头文件在 Xcode 中编译,你需要打开 C++11 库支持。在导航器中转到您的项目,单击构建设置,然后搜索 C++ 标准库。将项目的设置更改为 libc++。我已经编辑了 Xornand 的出色答案以反映此信息,但在我的编辑被接受之前它不会可见。 :) @m_j 请将接受的答案更改为这个! :)【参考方案3】:

除非您需要纳秒或微秒,否则请只使用睡眠(整数或数字)

【讨论】:

提问者表示他需要毫秒级的分辨率; sleep() 提供秒级分辨率。

以上是关于OS X 上的 C++ 中的睡眠操作的主要内容,如果未能解决你的问题,请参考以下文章

在 Mac OS X 上以编程方式获取睡眠时间(和其他节能设置)

C++ 中的睡眠函数

转OS X Mavericks: 防止 Mac 进入睡眠 -- 不错

Mac OS快速睡眠快捷键

百战c++(os1)

百战c++(os1)