首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于QObject的类具有到自身的队列连接

基于QObject的类具有到自身的队列连接
EN

Stack Overflow用户
提问于 2012-06-27 23:41:27
回答 2查看 6.4K关注 0票数 5

我正在钻研一些我正在编写的源代码。我发现了一个奇怪的语句,是有人写的。源代码是一个带有QML GUI的GUI应用程序,并使用QT 4.7.x。

下面的代码片段属于核心应用程序逻辑。

代码语言:javascript
复制
// connect signal-slots for decoupling
QObject::connect (this, SIGNAL(setCurrentTaskSignal(int)), this, 
    SLOT(SetCurrentTaskSlot(int)), Qt::QueuedConnection);

奇怪的是,对象通过队列连接到自己,这本质上意味着对象可能同时“活”在不同的线程中?

乍一看,这对我来说没有任何意义。有人能想到为什么这样的联系是合理的或需要的吗?这能行得通吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-27 23:52:33

它会正常工作,没有任何问题。也许在调用SetCurrentTaskSlot之前需要进行一些事件循环处理?

请注意,QueuedConnection并不意味着某些东西在不同的线程中。QueuedConnection只是指在发出信号时,不会直接调用对应的slot。它将在事件循环上排队,并在将控制权交还给事件循环时进行处理

票数 10
EN

Stack Overflow用户

发布于 2012-06-28 01:39:01

排队的连接并不意味着接收方所在的位置。反之亦然:要安全地向位于另一个线程中的对象发送信号,必须使用队列连接。但是你可以将它们用于任何线程中的对象!

一种是使用排队连接来确保信号将从事件循环中传递,而不是像直接连接那样立即从发射位置传递。直接连接在概念上是对列表上的函数指针的一组调用。从概念上讲,排队连接是一个发送给聪明的接收者的事件,该接收者可以根据事件的内容执行函数调用。

该事件是内部QMetaCallEvent,它是对该事件执行操作并执行调用的QObject::event

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11230080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档