首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++的跨平台睡眠功能

C++的跨平台睡眠功能
EN

Stack Overflow用户
提问于 2012-06-07 00:23:18
回答 7查看 45.3K关注 0票数 44

是否可以使用宏生成跨平台睡眠代码?例如

代码语言:javascript
复制
#ifdef LINUX
#include <header_for_linux_sleep_function.h>
#endif
#ifdef WINDOWS
#include <header_for_windows_sleep_function.h>
#endif
...
Sleep(miliseconds);
...
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-06-07 00:38:08

是的有。您所要做的就是将不同的系统休眠调用以及如下所示的include语句包装在您自己的函数中:

代码语言:javascript
复制
#ifdef LINUX
#include <unistd.h>
#endif
#ifdef WINDOWS
#include <windows.h>
#endif

void mySleep(int sleepMs)
{
#ifdef LINUX
    usleep(sleepMs * 1000);   // usleep takes sleep time in us (1 millionth of a second)
#endif
#ifdef WINDOWS
    Sleep(sleepMs);
#endif
}

然后,您的代码调用mySleep进入睡眠状态,而不是直接进行系统调用。

票数 45
EN

Stack Overflow用户

发布于 2012-07-01 02:18:13

是啊。但这只适用于C++11later

代码语言:javascript
复制
#include <chrono>
#include <thread>
...
std::this_thread::sleep_for(std::chrono::milliseconds(ms));

其中,ms是您想要休眠的时间,单位为毫秒。

您还可以将milliseconds替换为nanosecondsmicrosecondssecondsminuteshours。(这些是std::chrono::duration类型的专门化。)

更新:C++14中,如果你睡眠了一段时间,比如100毫秒,std::chrono::milliseconds(100)可以写成100ms。这要归功于C++11中引入的user defined literals。在C++14中,chrono库已扩展为包括以下用户定义的文字:

  • std::literals::chrono_literals::operator""h
  • std::literals::chrono_literals::operator""min
  • std::literals::chrono_literals::operator""s
  • std::literals::chrono_literals::operator""ms
  • std::literals::chrono_literals::operator""us
  • std::literals::chrono_literals::operator""ns

实际上,这意味着您可以编写类似以下内容的代码。

代码语言:javascript
复制
#include <chrono>
#include <thread>
using namespace std::literals::chrono_literals;

std::this_thread::sleep_for(100ms);

请注意,虽然using namespace std::literals::chrono_literals提供的namespace pollution最少,但当使用using namespace std::literalsusing namespace std::chrono时,也可以使用这些运算符。

票数 73
EN

Stack Overflow用户

发布于 2013-04-07 18:46:59

shf301有一个好主意,但这种方式更好:

代码语言:javascript
复制
#ifdef _WINDOWS
#include <windows.h>
#else
#include <unistd.h>
#define Sleep(x) usleep((x)*1000)
#endif

然后像这样使用:

代码语言:javascript
复制
Sleep(how_many_milliseconds);
票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10918206

复制
相关文章

相似问题

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