Is it possible with macros make cross platform Sleep code? For example
#ifdef LINUX
#include <header_for_linux_sleep_function.h>
#endif
#ifdef WINDOWS
#include <header_for_windows_sleep_function.h>
#endif
...
Sleep(miliseconds);
...
Yup. But this only works in C++11 and later.
#include <chrono>
#include <thread>
...
std::this_thread::sleep_for(std::chrono::milliseconds(ms));
where ms
is the amount of time you want to sleep in milliseconds.
You can also replace milliseconds
with nanoseconds
, microseconds
, seconds
, minutes
, or hours
. (These are specializations of the type std::chrono::duration.)
Update: In C++14, if you're sleeping for a set amount of time, for instance 100 milliseconds, std::chrono::milliseconds(100)
can be written as 100ms
. This is due to user defined literals, which were introduced in C++11. In C++14 the chrono
library has been extended to include the following user defined literals:
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
Effectively this means that you can write something like this.
#include <chrono>
#include <thread>
using namespace std::literals::chrono_literals;
std::this_thread::sleep_for(100ms);
Note that, while using namespace std::literals::chrono_literals
provides the least amount of namespace pollution, these operators are also available when using namespace std::literals
, or using namespace std::chrono
.