improved listener lifetime controls (in case a deferred invoke takes longer than expected)

This commit is contained in:
Heather Anderson 2020-08-09 15:44:41 -07:00
parent 2e5244663e
commit 34e3d9dd2b
2 changed files with 5 additions and 2 deletions

View file

@ -27,8 +27,9 @@ PacketReceiver::PacketReceiver(QObject* parent) : QObject(parent) {
}
bool PacketReceiver::ListenerReference::invokeWithQt(const QSharedPointer<ReceivedMessage>& receivedMessagePointer, const QSharedPointer<Node>& sourceNode) {
ListenerReferencePointer thisPointer = sharedFromThis();
return QMetaObject::invokeMethod(getObject(), [=]() {
this->invokeDirectly(receivedMessagePointer, sourceNode);
thisPointer->invokeDirectly(receivedMessagePointer, sourceNode);
});
}

View file

@ -20,6 +20,8 @@
#include <QtCore/QObject>
#include <QtCore/QPointer>
#include <QtCore/QSet>
#include <QtCore/QSharedPointer>
#include <QtCore/QEnableSharedFromThis>
#include "NLPacket.h"
#include "NLPacketList.h"
@ -42,7 +44,7 @@ namespace std {
class PacketReceiver : public QObject {
Q_OBJECT
public:
class ListenerReference {
class ListenerReference : public QEnableSharedFromThis<ListenerReference> {
public:
virtual bool invokeDirectly(const QSharedPointer<ReceivedMessage>& receivedMessagePointer, const QSharedPointer<Node>& sourceNode) = 0;
bool invokeWithQt(const QSharedPointer<ReceivedMessage>& receivedMessagePointer, const QSharedPointer<Node>& sourceNode);