0

我正在寻找一种方法在 Java 或 C 中暂停线程以获得准确的毫秒数(我可以使用 JNI 来访问 C 方法。

到目前为止,我在 java 代码中使用了以下内容。

LinkedBlockingQueue<String> SLEEPER = new LinkedBlockingQueue<String>();
SLEEPER.poll(msTime, TimeUnit.MILLISECONDS); 

这是在这个论坛的一个线程中提出的,并且在我们的大多数 windows7 机器上都运行良好。

但这并没有给我在一套新硬件上的准确结果。所以我决定使用 JNI 来访问 C。但即使这样也不会在新硬件(Windows7 上的戴尔和惠普)上暂停精确的毫秒数。

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 操作系统上执行此操作。

quantum不是因为计时器的分辨率,而是因为每个线程的“时间片”(有时称为和。

于 2012-11-10T05:51:39.117 回答