gpt4 book ai didi

java - Java/C 中以毫秒为单位的精确 sleep

转载 作者:行者123 更新时间:2023-12-01 18:57:58 25 4
gpt4 key购买 nike

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

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

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

这是在本论坛的一个主题中建议的,并且在我们的大多数 Windows7 计算机上运行良好。

但它并没有在一组新硬件上给我准确的结果。所以我决定使用 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);
}
}

有没有人有可靠的选择来准确地在线程上 sleep 。谢谢。

最佳答案

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

并不是因为计时器的分辨率,而是因为每个线程的“时间片”(有时称为“量子”)通常设置为几毫秒(在我的古董 XP 上为 15 毫秒)在这里),这不是你可以随便玩的东西。

关于java - Java/C 中以毫秒为单位的精确 sleep ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13319634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com