我正在寻找一种方法来在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);
}
}
是否有人有可靠的选择在线程上准确睡眠。 感谢。
答案 0 :(得分:4)
您无法在非RT操作系统上执行此操作。
与定时器的分辨率不同,但因为每个线程的'时间片'(有时称为quantum
)通常设置为几毫秒(我的古董xp为15),并不是你可以玩的东西。