gpt4 book ai didi

.net - .net thread.sleep不准确

转载 作者:行者123 更新时间:2023-12-03 13:19:31 25 4
gpt4 key购买 nike

我快疯了!
我通过gsm发送音频,并按照语音规范发送音频,我必须发送语音日期数据包,然后等待20毫秒才能获得正常语音。我使用system.threading.thread.sleep(20)。但是,我注意到声音很慢。但是当我运行另一个不同的应用程序时,声音恢复正常。

经过一些调试后,我发现system.Threading.Thread.Sleep(20)花费31毫秒,但是如果我运行另一个不同的应用程序,则Thread.Sleep(20)将始终是准确的。

为了使线程准确地 sleep 20毫秒,同时我可以使用的其他替代方法还有哪些,不会影响PC性能。

谢谢,

最佳答案

如前所述,准确的计时通常需要一个不会被时间限制的线程/进程,为此,您必须Spin而不是Sleep

选项1

如果您想要绝对的准确性,我会使用专用的高优先级线程和秒表。

bool running = true;
Thread t = new Thread(() =>
{
Stopwatch sw = Stopwatch.StartNew();
while (running)
{
if (sw.ElapsedMilliseconds >= 20)
{
RunCode();
sw.Restart();
}
}
}) { Priority = ThreadPriority.Highest, IsBackground = true };

t.Start();

// ...

running = false;
t.Join();

选项2

稍微减少一点,不会在其他线程上运行,但仍会旋转。
while (true) 
{
SpinWait.SpinUntil(() => false, TimeSpan.FromMilliseconds(20));
RunCode();
}

选项3

一些开源的高分辨率计时器代码。例如 https://gist.github.com/HakanL/4669495

关于.net - .net thread.sleep不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34644284/

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