Qt5 中存在哪些同步原语可以让我在单个线程中等待信号到达?
Posted
技术标签:
【中文标题】Qt5 中存在哪些同步原语可以让我在单个线程中等待信号到达?【英文标题】:What synchronization primitives exist in Qt5 that would allow me to wait for a signal to arrive in a single thread? 【发布时间】:2014-08-01 10:57:57 【问题描述】:在我的应用程序中,我需要在信号到达之前阻止执行(等待网络请求完成)。这发生在非 gui 线程中。
查看 Qt 5.3 文档中的blocking fortune client example,它似乎使用了waitForConnected() 特定于QTcpSocket 类的方法,但我使用的是QNetworkAccessManager,它根本没有等待方法。
我还阅读了elsewhere,要做到这一点,可能需要创建一个临时的QEventLoop,它会一直阻塞直到事件完成。这个解决方案带有一堆警告,不应该在“生产代码”中使用它,因为在极端情况等情况下可能会出现各种潜在问题。
所以。男人该怎么办?
我可以在不引入第二个线程的情况下以某种方式使用 QWaitCondition 进行这项工作吗? Qt5 中有哪些同步原语可以让我在单个线程中等待信号到达?
谢谢!
【问题讨论】:
Qt 被设计成异步的,这意味着你不应该阻塞,除非在一些不寻常的情况下(例如单元测试)。如果你可以描述你想要实现的目标,也许有人可以建议一种方法来完成它而不会阻塞。 这样回答了这个问题,除了启动一个临时事件循环之外,Qt 中没有用于阻塞信号的原语。 要不要把它作为一个答案,这样我们才能把这个线程从它的痛苦中解救出来? 【参考方案1】:Qt 被设计成asynchronous,这意味着你不应该阻塞,除非在一些不寻常的情况下(例如单元测试)。
如果你能描述你想要达到的目标,也许有人可以建议一种方法来实现它而不会阻塞。
【讨论】:
不幸的是,我的案例与访问易碎硬件有关,所以没有任何办法解决这个问题以上是关于Qt5 中存在哪些同步原语可以让我在单个线程中等待信号到达?的主要内容,如果未能解决你的问题,请参考以下文章