0

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);
    }
    }

スレッドで正確にスリープするための信頼できるオプションはありますか。ありがとう。

4

1 に答える 1

4

非 RT OS では実行できません。

タイマーの解像度によるものではありませんが、スレッドごとの「タイム スライス」( と呼ばれることもありますquantum) は通常数ミリ秒 (私のアンティーク XP では 15 ミリ秒) に設定されており、ただプレイできるものではないためです。と。

于 2012-11-10T05:51:39.117 に答える