multithreading - 从另一个线程读取Qt小部件可以吗?

标签 multithreading qt

我发现许多回答说从另一个线程访问Qt Gui Widgets是不安全的。如果我们尝试修改小部件,我同意这一点。但是,如果我只读取小部件的值而不进行任何修改,该怎么办?
我使用Qt设计了一个GUI工具,我的工作线程直接读取Widget,例如,获取QLineEdit的文本,获取QComboBox的值等。而且我还没有发现任何问题。
我将MainWindow的指针传递给工作线程。
这真的不安全吗?

最佳答案

首先:在不保护内存(MutexSignal & Slot)的情况下从另一个线程读取属性始终是一个坏主意。

您的情况:如果什么都不想改变值,那么您应该没事。如果每个线程仅读取该值,则没有问题。但是,例如,如果通过单击向上箭头向下箭头来更改QComboBox的值,则选择一个新项(我希望您会这样做,因为这就是使用QComboBox的原因)的值将会被写入,如果您的工作线程想要在同一时刻读取该值,则应用程序可能会导致崩溃(是否发生卡什取决于您的线程提取信息的频率)。

您的应用程序从未崩溃,因为这种情况从未出现过。
但这并不意味着这不可能发生。

关于multithreading - 从另一个线程读取Qt小部件可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53058849/

相关文章:

multithreading - 在OMP(gfortran)中使用原子的奇怪结果

java - 实现连续线程的高效方式

c++ - 使用 qInstallMessageHandler 的记录器类找不到指向函数的指针?

c++ - 如何在 QOpenGLWidget 中渲染三角形?

c++ - 向旧 Qt PieMenu 添加新行和空格

c# - 在 C# 中实现自己的线程

java - LibGDX:在另一个线程中创建新的 scene2d 对象?

java - 我是否正确理解了 JSR-133 Cookbook 中的 Can Reorder 规则?

c++ - Qt中录音的setCodec()函数如何选择参数

python - python中递归收集所有选中的QTreeview项