Propablyプラットフォーム固有の#define
Sを使用してラッパーを行います:
#if defined(WIN32)
#include <windows.h>
#elif defined(__UNIX__)
#include <unistd.h>
#else
#endif
...
int millisleep(unsigned ms)
{
#if defined(WIN32)
SetLastError(0);
Sleep(ms);
return GetLastError() ?-1 :0;
#elif defined(LINUX)
return usleep(1000 * ms);
#else
#error ("no milli sleep available for platform")
return -1;
#endif
}
更新
Jonathan's comment belowを参照して、より近代的な、よりポータブル(そして同様に修正を見つけてください。 })バージョン:
#if defined(WIN32)
#include <windows.h>
#elif defined(__unix__)
#include <time.h>
#include <unistd.h>
#else
#endif
...
int millisleep(unsigned ms)
{
#if defined(WIN32)
SetLastError(0);
Sleep(ms);
return GetLastError() ?-1 :0;
#elif _POSIX_C_SOURCE >= 199309L
/* prefer to use nanosleep() */
const struct timespec ts = {
ms/1000, /* seconds */
(ms % 1000) * 1000 * 1000 /* nano seconds */
};
return nanosleep(&ts, NULL);
#elif _BSD_SOURCE || \
(_XOPEN_SOURCE >= 500 || \
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) && \
!(_POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700)
/* else fallback to obsolte usleep() */
return usleep(1000 * ms);
#else
# error ("No millisecond sleep available for this platform!")
return -1;
#endif
}
出典
2013-02-11 18:49:34
alk
['usleep'](http://pubs.opengroup.org/onlinepubs/009695399/functions/usleep.html)はPOSIXなので、POSIXに準拠するすべてのシステム(HP/UX、AIXなど)にあるべきです。一方で、オプションであるとマークされている['nanosleep'](http://pubs.opengroup.org/onlinepubs/009695399/functions/nanosleep.html)では古くなったとマークされています。 –
nミリ秒の遅延を*表現する方法があるかもしれないからといって、ホストオペレーティングシステムがあなたに求めているものを正確にあなたに*与えることは絶対にありません。あなたがリストしているOSは、通常はリアルタイムではないので、そのようなことを保証するものではありません。遅延が終了すると、より高い優先度のタスクがCPUを占有する可能性があります。 – unwind
以下のリンクはあなたの質問に答えますか? http://stackoverflow.com/questions/1157209/is-there-an-alternative-sleep-function-in-c-to-milliseconds – kunal18