I am trying to send a DDS module with the signal-slot method. My program crashes to segmentation fault when it executes the emit signal command. The part of the code where it crashes is inside the moc file and it is:
moc_myclass.cpp:
// SIGNAL 0
void MyClass::MySignal(DDSModule::Message & _t1)
{
void *_a[] = { Q_NULLPTR, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
}
// SIGNAL 0
void MyClass::MySignal(DDSModule::Message & _t1)
{
void *_a[] = { Q_NULLPTR, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
QMetaObject::activate(this, &staticMetaObject, 0, _a);
}
To copy to clipboard, switch view to plain text mode
I have tried to commenting out the connect() part, but the program still crashes so I'm guessing it has something to do with the data I am trying to send. The main code is shown below.
myclass.h:
{
Q_OBJECT
signals:
void MySignal(DDSModule::Message &message);
public:
MyClass();
void ddsMessageHandler(DDSModule::Message &message);
protected:
virtual void run();
private:
// Random attributes
};
class MyClass: public QThread
{
Q_OBJECT
signals:
void MySignal(DDSModule::Message &message);
public:
MyClass();
void ddsMessageHandler(DDSModule::Message &message);
protected:
virtual void run();
private:
// Random attributes
};
To copy to clipboard, switch view to plain text mode
myclass.cpp:
void MyClass::ddsMessageHandler(DDSModule::Message &message)
{
emit MySignal(message);
}
MyClass::MyClass()
{
}
void MyClass::ddsMessageHandler(DDSModule::Message &message)
{
emit MySignal(message);
}
MyClass::MyClass()
{
}
To copy to clipboard, switch view to plain text mode
ddshandler.h:
{
Q_OBJECT
public:
DDSHandler();
signals:
void DDSDataSend(MyOtherClass *newObject);
public slots:
void handleDDSData(DDSModule::Message &message);
private:
void run();
MyClass *myClass_;
};
class DDSHandler : public QThread
{
Q_OBJECT
public:
DDSHandler();
signals:
void DDSDataSend(MyOtherClass *newObject);
public slots:
void handleDDSData(DDSModule::Message &message);
private:
void run();
QCoreApplication *app;
MyClass *myClass_;
};
To copy to clipboard, switch view to plain text mode
ddshandler.cpp:
DDSHandler::DDSHandler()
{
myClass_ = new MyClass;
myClass_->start();
qRegisterMetaType<DDSModule::Message &message>("DDSModule::Message &message");
connect(myClass_, SIGNAL(DDSDataReady(DDSModule::Message &message)),
this, SLOT(handleDDSData(DDSModule::Message &message)));
}
void DDSHandler::handleDDSData(DDSModule::Message &message)
{
myOtherClass *messageInNewForm = processMessage(DDSModule::Message &message);
emit DDSDataSend(*messageInNewForm)
}
DDSHandler::DDSHandler()
{
myClass_ = new MyClass;
myClass_->start();
qRegisterMetaType<DDSModule::Message &message>("DDSModule::Message &message");
connect(myClass_, SIGNAL(DDSDataReady(DDSModule::Message &message)),
this, SLOT(handleDDSData(DDSModule::Message &message)));
}
void DDSHandler::handleDDSData(DDSModule::Message &message)
{
myOtherClass *messageInNewForm = processMessage(DDSModule::Message &message);
emit DDSDataSend(*messageInNewForm)
}
To copy to clipboard, switch view to plain text mode
Is there any restrictions on what type of data I can send with the emit signal? The message that comes to the ddsMessageHandler() is valid. I have also tried removing the reference markers (&) but it doesn't have any effect either.
Bookmarks