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

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

【问题讨论】:

  • nanosleep(), usleep() 可能值得一看。

标签: c++ macos sleep


【解决方案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() 提供秒级分辨率。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 2011-03-30
  • 1970-01-01
  • 2010-12-12
相关资源
最近更新 更多