gpt4 book ai didi

multithreading - 多线程程序中的QPointer

转载 作者:行者123 更新时间:2023-12-04 06:39:58 24 4
gpt4 key购买 nike

根据 http://doc.qt.io/qt-5/qpointer.html ,QPointer 非常有用。但我发现在以下情况下它可能效率低下:

如果我想显示标签三次或做其他事情,我必须使用

if(label) label->show1();if(label) label->show2();if(label) label->show3();

代替if(label) { label->show1();label->show2();label->show3(); }

只是因为标签可能在 label->show1();label->show2(); 之后被另一个线程破坏。

有没有比三个 if 更漂亮的方法来获得相同的功能?

另外一个问题是,当label在if(label)之后被销毁时,if(label) label->show1();是否还是错误的?

我没有多线程程序方面的经验。任何帮助表示赞赏。 ;)

最佳答案

我认为唯一安全的方法是确保您只从主/GUI 线程(即运行 Qt 事件循环的线程,在 QApplication::exec() 内)访问您的 QWidgets。

如果您有在不同线程中运行的代码,并且该代码希望显示/隐藏/其他任何 QLabel,则该代码需要创建一个 QEvent 对象(或其子类)并调用 qApp->postEvent () 将该对象发送到主线程。然后,当 Qt 事件循环在主线程中获取并处理该 QEvent 时,您的代码就可以安全地对 QLabel 执行操作了。

或者(也许更简单),您的线程代码可以发出跨线程信号(如 here 所述)并让 Qt 在内部处理事件发布。这可能更适合您的目的。

关于multithreading - 多线程程序中的QPointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7588775/

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