Java または C で正確なミリ秒数だけスレッドを一時停止する方法を探しています (JNI を使用して C メソッドにアクセスできます。
これまでのところ、Javaコードで次を使用していました。
LinkedBlockingQueue<String> SLEEPER = new LinkedBlockingQueue<String>();
SLEEPER.poll(msTime, TimeUnit.MILLISECONDS);
これは、このフォーラムのスレッドの 1 つで提案されたもので、ほとんどの Windows 7 マシンでうまく機能しました。
しかし、新しいハードウェア セットでは正確な結果が得られません。そこで、JNI を使用して C にアクセスすることにしました。しかし、これでも、新しいハードウェア (Windows7 上の Dell および HP) では正確なミリ秒単位で一時停止しません。
JNIEXPORT void JNICALL Java_JniTimer_jniWait(JNIEnv *env, jobject obj , jint waitTime ) {
HANDLE hWaitEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (hWaitEvent)
{
WaitForSingleObject(hWaitEvent,waitTime);
CloseHandle (hWaitEvent);
}
}
スレッドで正確にスリープするための信頼できるオプションはありますか。ありがとう。