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 上以编程方式获取睡眠时间(和其他节能设置)