-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
eventLoop 可用于同步等待信号,deleteLater 可以延迟删除对象,但不能在 eventLoop 之前使用 deleteLater。
因为 eventLoop 不会阻塞主线程事件,而 deleteLater 会在主线程下次循环时被调用,如果使用 eventLoop 等待对象的信号,而在 eventLoop.exec() 之前调用了对象的 deleteLater 方法,对象会被删除,eventLoop 永远无法等到对象的信号。
例子:
QNetworkRequest request(url);
QNetworkReply *reply = m_http->get(request);
reply->deleteLater(); // 错误
QEventLoop eventLoop;
connect(reply, &QNetworkReply::finished, &eventLoop, &QEventLoop::quit);
eventLoop.exec();
reply->deleteLater(); // 正确Metadata
Metadata
Assignees
Labels
No labels