gpt4 book ai didi

c++ - Qt C++ 计时问题

转载 作者:行者123 更新时间:2023-11-30 05:19:27 25 4
gpt4 key购买 nike

在我的程序中,我目前正在尝试实现芯片寄存器的实时更新。此实时更新必须以特定间隔进行,60hz 和 120hz 很常见,但如果可能,200hz 会更好。

无论如何,我想优化我的循环,因为速度很重要。要查看慢速部分在哪里,我使用 QElapsedTimer 来测量经过的纳秒数。我目前被 Qt 中 for/while 循环的大量开销所困扰。

代码:

QElapsedTimer outsideloop;
QElapsedTimer insideloop;
int totalinside = 0;

outsideloop.start();

while(x<reg.size())
{
insideloop.start();
//get registers from chip
//process register values
x++;
totalinside+= insideloop.nsecsElapsed();
}

qDebug()<<"Time elapsed Outside:"<<outsideloop.nsecsElapsed();<<"inside:"<<totalinside;

现在,仅在循环“内部”的时间通常比在循环“外部”测量的时间少 4-5 毫秒。举个例子,“内部”通常测量大约 5 毫秒,而外部通常测量大约 10 毫秒。有时差异较小(1 毫秒),有时则大得多(15-30 毫秒)。当我使用 for 循环时,也存在这种差异。

此外,我还测量了进入和退出循环所需的时间,如下所示:

nstimer.start();
while(x<reg.size())
{
qDebug()<<"Time to get into loop"<<nstimer.nsecsElapsed();
nstimer.start();
}
qDebug()<<"Time to get out of loop"<<nstimer.nsecsElapsed();

这在我的系统上每次大约需要 0.005 毫秒,所以不太相关。

我不确定是什么原因造成的,因为这并不是一个稳定的延迟。我希望尽可能快地完成所有事情,从而消除给我带来麻烦的额外时差。

如果我错过了显而易见的内容,请原谅我的经验不足。

谢谢!

最佳答案

比屏幕更新率更快的更新没有意义。如果您需要受限于屏幕更新率,则必须使用 OpenGL 或 D3D 实现您的 UI,并在每次垂直同步后从芯片中获取新数据。

但我质疑其中任何一个的必要性。将会有大量的值,而消费这些值的人无论如何也无法以如此快的更新速度对它们做太多事情。请记住,人类需要大约 200 毫秒来处理一个文本/数字值。如果您提供非文本/非数字显示,那会更好,但我怀疑它在实践中会有什么不同。您不是在设计游戏。

最有可能的是,您的 UI 和您要连接的芯片之间的通信 channel 带宽有限和/或延迟不错,因此如果您在一个线程中有一个对象不断从芯片读取数据并发出新值,以及使用这些的 UI 对象,它会在不需要计时器的情况下正常工作。您将使用通信系统的属性,通过利用固有的延迟和带宽限制来推导出时基,从而确保正确的计时。

回到您的问题本身:循环是 C++ 循环。它的性能与您在循环中所做的事情以及运行此代码的平台上调度程序的性能有关。与 Qt 本身无关。

关于c++ - Qt C++ 计时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41104873/

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