gpt4 book ai didi

c++ - 多线程 UI 的最佳方式?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:07 24 4
gpt4 key购买 nike

正如文档中明确指出的,Qt GUI 只能从主线程访问。对于具有多个大而繁忙的表的复杂应用程序,这可能是 Qt 喜欢进行的所有字体大小文本度量计算的瓶颈。我能想到的唯一选择是使用单独的进程进行多任务处理。这些表目前的速度与您所能获得的一样快,自定义模型直接映射到缓存,缓存由另一个线程使用 dataChanged() 调用最保守的已更改单元格集提供。我已经使用 vTune 进行了分析,现在 70% 的应用程序时间都花在了 Qt 渲染代码上。有什么建议吗?

最佳答案

我没有使用过 QT,但是在我熟悉的几乎所有 GUI 中,仅从一个线程(GUI 线程)访问 GUI 是一个众所周知的问题。对于这种情况,我使用了 2 种解决方案,其中我更喜欢第一种:

1) 您的表单将按计时器间隔更新 GUI(在本例中为表格)。计时器在 GUI 线程的事件上被激活。在这些计时器事件中,您从全局变量中读取数据并更新您的表。全局变量可以根据需要由任意多个线程更新。您可能需要同步(例如信号量)对全局变量的访问。

2) 在许多 GUI API 中,线程可以通过将函数(或对象)交给 GUI 线程来更新 GUI,并要求它尽快在其上下文中执行它。调用线程同时阻塞,直到 GUI 完成操作。我可以记忆起三个这样的函数——Java 和 C# 中的 InvokeInvokeLater,或者 wxPython 中的 wx.CallAfter

关于c++ - 多线程 UI 的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13716441/

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