Index: sources/canbus/frameinterface.cpp =================================================================== diff -u -rfeb3423b373dc2a2c4267ef9fcb4d924d738423d -re1605219ac2baf49ef21d0889f845ac53d59c3c1 --- sources/canbus/frameinterface.cpp (.../frameinterface.cpp) (revision feb3423b373dc2a2c4267ef9fcb4d924d738423d) +++ sources/canbus/frameinterface.cpp (.../frameinterface.cpp) (revision e1605219ac2baf49ef21d0889f845ac53d59c3c1) @@ -16,6 +16,7 @@ // Qt #include #include +#include // Project #include "logger.h" @@ -27,9 +28,6 @@ // namespace using namespace Can; -// Singleton -SINGLETON_INIT(FrameInterface) - /*! * \brief FrameInterface Constructor * \param parent @@ -39,12 +37,36 @@ /*! * \brief Message Handler initializer */ -void FrameInterface::init() +bool FrameInterface::init() { + // This is required for Signal/Slots in threading. + qRegisterMetaType("Can_Id"); + + // runs in main thread + Q_ASSERT_X(QThread::currentThread() == qApp->thread() , "_FrameInterface::init", "The Class initialization must be done in Main Thread" ); + _CanFrame_Thread.setObjectName("Can Frame Thread"); + connect(qApp, &QApplication::aboutToQuit, this, &FrameInterface::quit); + _CanFrame_Thread.start(); + moveToThread(&_CanFrame_Thread); + + // runs in USB Watcher thread initConnections(); + LOG_EVENT(QObject::tr("FrameInterface Initialized")); + + return true; } +void FrameInterface::quit() +{ + // runs in Logger thread + moveToThread(qApp->thread()); + + // runs in main thread + _CanFrame_Thread.quit(); + _CanFrame_Thread.wait(); +} + /*! * \brief FrameInterface connections definition * \details Initializes the required signal/slot connection between this class and other objects @@ -53,12 +75,12 @@ void FrameInterface::initConnections() { // From GUI - connect(_MessageDispatcher, SIGNAL(didFrameTransmit(Can_Id, const QByteArray &)), - this , SLOT( onFrameTransmit(Can_Id, const QByteArray &))); + connect(&_MessageDispatcher, SIGNAL(didFrameTransmit(Can_Id, const QByteArray &)), + this , SLOT( onFrameTransmit(Can_Id, const QByteArray &))); // From CAN - connect(_CanInterface , SIGNAL( didFrameReceive( const QCanBusFrame &)), - this , SLOT( onFrameReceive( const QCanBusFrame &))); + connect(&_CanInterface , SIGNAL( didFrameReceive( const QCanBusFrame &)), + this , SLOT( onFrameReceive( const QCanBusFrame &))); } /*!