我正在寻找一种方法在 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);
}
}
有没有人有可靠的选择来准确地在线程上睡眠。谢谢。