是否可以使用宏生成跨平台睡眠代码?例如
#ifdef LINUX
#include <header_for_linux_sleep_function.h>
#endif
#ifdef WINDOWS
#include <header_for_windows_sleep_function.h>
#endif
...
Sleep(miliseconds);
...发布于 2012-06-07 00:38:08
是的有。您所要做的就是将不同的系统休眠调用以及如下所示的include语句包装在您自己的函数中:
#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进入睡眠状态,而不是直接进行系统调用。
发布于 2012-07-01 02:18:13
是啊。但这只适用于C++11和later。
#include <chrono>
#include <thread>
...
std::this_thread::sleep_for(std::chrono::milliseconds(ms));其中,ms是您想要休眠的时间,单位为毫秒。
您还可以将milliseconds替换为nanoseconds、microseconds、seconds、minutes或hours。(这些是std::chrono::duration类型的专门化。)
更新:在C++14中,如果你睡眠了一段时间,比如100毫秒,std::chrono::milliseconds(100)可以写成100ms。这要归功于C++11中引入的user defined literals。在C++14中,chrono库已扩展为包括以下用户定义的文字:
std::literals::chrono_literals::operator""hstd::literals::chrono_literals::operator""minstd::literals::chrono_literals::operator""sstd::literals::chrono_literals::operator""msstd::literals::chrono_literals::operator""usstd::literals::chrono_literals::operator""ns实际上,这意味着您可以编写类似以下内容的代码。
#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::literals或using namespace std::chrono时,也可以使用这些运算符。
发布于 2013-04-07 18:46:59
shf301有一个好主意,但这种方式更好:
#ifdef _WINDOWS
#include <windows.h>
#else
#include <unistd.h>
#define Sleep(x) usleep((x)*1000)
#endif然后像这样使用:
Sleep(how_many_milliseconds);https://stackoverflow.com/questions/10918206
复制相似问题