8

重複の可能性:
1 ミリ秒未満のスリープ

プログラムを 1 ナノ秒スリープさせるにはどうすればよいですか? インターネットを検索したところ、スリープする方法がいくつか見つかりましたが、
windows.hSleep()はミリ秒しかスリープしません。
ctimeは POSIX システム専用でnanosleep()、私は Windows を使用しています。
私もこれを試しました:

int usleep(long usec)
{
    struct timeval tv;
    tv.tv_sec = usec/1000000L;
    tv.tv_usec = usec%1000000L;
    return select(0, 0, 0, 0, &tv);
};

しかし、Code::Blocks は次のように述べています。

obj\Release\main.o:main.cpp|| undefined reference to `select@20'|

私は多くのことを試しましたが、すべて失敗しました。私は何をすべきか?

4

2 に答える 2

16

C++11 の使用

#include <chrono>
#include <thread>
...
std::this_thread::sleep_for(std::chrono::nanoseconds(1));

実装は、指定された期間より長くスリープする場合があることに注意してください。

于 2012-06-16T13:48:27.497 に答える
4

また、タイムスライスよりも短いスリープを許可しないスケジューラーがあることにも注意してください (ウィンドウとマシンによっては、4 ミリ秒から 10 ミリ秒程度)。それ以下の睡眠は不可能です

これは、その問題のウィンドウに関する(かなり古い)研究です。

この記事では、それを実現するために Win32timeBeginPeriod()を使用することを提案しています。

于 2012-06-16T13:58:56.763 に答える