gpt4 book ai didi

c++ - deleteLater() 是否等待所有未决信号被传递?

转载 作者:行者123 更新时间:2023-11-30 04:12:21 24 4
gpt4 key购买 nike

我正在考虑编写这段代码:

emit finished();
deleteLater();

但这让我想知道 finished() 是否总是在对象被删除之前交付。我很确定它将为 Qt::DirectConnection 提供,但我不确定 Qt::QueuedConnection,或者插槽是否在另一个线程中。

最佳答案

当你发出一个信号时,它被放入接收对象的线程的事件队列中进行处理。调用 deleteLater 还会向队列中添加一个事件,因此如果接收对象和被删除的对象具有相同的线程关联,则它们将按顺序执行,而不管线程类型如何。

如果发送方和接收方具有不同的线程亲和性(在不同的线程中运行),那么如果接收方的事件循环在发送方的事件循环之前开始处理,我希望 deleteLater 可以在发射完成之前被调用。

如果您想保证 finished 首先执行,您可以使用阻塞连接连接发送方和接收方,这将暂停发送方的线程,直到消息被传递。

connect(sender, SIGNAL(finished()), receiver, SLOT(handleFinished(), Qt::BlockingQueuedConnection);

请注意,如果使用 Qt::BlockingQueuedConnection 并且发送方和接收方具有相同的线程关联,应用程序将被死锁。

关于c++ - deleteLater() 是否等待所有未决信号被传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19863629/

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