【发布时间】:2021-07-09 01:27:32
【问题描述】:
我快疯了!! 我通过 gsm 和语音规范发送音频,我必须发送语音数据包,然后等待 20 毫秒才能获得正常语音。我使用 system.threading.thread.sleep(20)。但是,我注意到声音很慢。但是当我运行另一个不同的应用程序时,声音变得正常。
经过一些调试,我发现 system.Threading.Thread.Sleep(20) 需要 31 毫秒,但是如果我运行另一个不同的应用程序,Thread.Sleep(20) 将始终准确。
为了使线程准确地休眠 20 毫秒并且同时不影响 PC 性能,我可以使用哪些其他替代方法。
谢谢,
【问题讨论】:
-
如果您想获得准确的结果,您将不得不旋转等待,这对 PC 性能不利。
-
睡眠精度由时钟中断率决定,默认为每秒 64 次。每 15.625 毫秒一次。所以 Sleep(20) 直到两个滴答声过去后才能完成,2 x 15.625 = 31.25 毫秒。可以更改中断率,浏览器或媒体播放器很容易这样做。他们打电话给timeBeginPeriod(),你也可以。
-
请注意,如果有任何问题,提高时钟中断率会对电池寿命产生重大影响。 wp.me/p1fTCO-kJ
-
亲爱的汉斯,你的计算是正确的。我得到的是 31 毫秒,一段时间后是 32 毫秒,然后是 31 毫秒。当我打开 Firefox 时,它会精确到 20 毫秒,读取 500 个读数。现在提出问题来解决这个问题。我应该将 timebeginPeriod 设置为什么?
-
汉斯...你做到了..非常感谢:)。它就像魔术一样工作。我使用了 timeBeginPeriod(10) ,一切正常。请建议如何将您的帖子设置为答案
标签: .net multithreading sleep