在Java / C中以毫秒为单位准确睡眠

时间:2012-11-10 05:44:18

标签: java windows-7 java-native-interface thread-sleep

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

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

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

这是在本论坛的一个主题上提出的,并且在我们的大多数Windows7机器上都运行良好。

但它没有给我一套新硬件的评分结果。因此我决定使用JNI来访问C.但即使这样也不会在新硬件(Windows 7上的戴尔和惠普)上暂停准确的毫秒数。

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

是否有人有可靠的选择在线程上准确睡眠。 感谢。

1 个答案:

答案 0 :(得分:4)

您无法在非RT操作系统上执行此操作。

与定时器的分辨率不同,但因为每个线程的'时间片'(有时称为quantum)通常设置为几毫秒(我的古董xp为15),并不是你可以玩的东西。