首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >转发从QCoreApplication::postEvent收到的QEvent是否安全?

转发从QCoreApplication::postEvent收到的QEvent是否安全?
EN

Stack Overflow用户
提问于 2017-03-04 16:52:51
回答 1查看 429关注 0票数 0

我有一个具有多个线程运行的QT C++应用程序,这些线程使用QCoreApplication::postEvent机制相互传递信息。QCoreApplication::postEvent文档明确声明必须在堆上分配事件,并且在事件发布后访问事件是不安全的。

http://doc.qt.io/qt-5/qcoreapplication.html#postEvent

当我的应用程序中的一个线程接收到由另一个线程发送给它的事件(通过QObject:: event )时,它通常会通过postEvent方法将事件“转发”到另一个线程。这里安全吗?我是否应该创建一个全新的事件,它是原版的副本?,我的应用程序还没有在all....but崩溃,这并不意味着风险就不在那里。 QT事件何时被视为“张贴”?

代码语言:javascript
运行
复制
bool MyQObjectDerivedClass::event(QEvent* evnt)
{
    // When  is QEvent considered posted?
    if(evnt->type() == MY_EVENT_TYPE)
    {
        // Forward the event..
        // Is this safe?  Or should I create a copy of the event?
        QCoreApplication::postEvent(myOtherQObjectClassPtr,evnt);
        return true;
    }
    else
    {
        return QObject::event(evnt);
    }
}
EN

Stack Overflow用户

回答已采纳

发布于 2017-03-05 08:18:14

当您发布一个事件(而不是使用sendEvent )时,事件指针的所有权将转移到接收对象的事件循环。

在将事件传递给对象之后,即在对象的event()方法返回之后,它将删除该事件。

因此,如果需要异步传递信息,则需要在从event()实现返回之前对其进行复制。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42598616

复制
相关文章

相似问题

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