Index: main.cpp =================================================================== diff -u -re1605219ac2baf49ef21d0889f845ac53d59c3c1 -r56d00a82669a7a2c00ab90109a89dbec8db27527 --- main.cpp (.../main.cpp) (revision e1605219ac2baf49ef21d0889f845ac53d59c3c1) +++ main.cpp (.../main.cpp) (revision 56d00a82669a7a2c00ab90109a89dbec8db27527) @@ -26,7 +26,6 @@ #include #include #include -#include // Project #include "maintimer.h" @@ -37,6 +36,7 @@ #include "guicontroller.h" #include "logger.h" #include "usbwatcher.h" +#include "threads.h" #ifdef UNIT_TEST #include TEST_CLASS_INCLUDE @@ -91,38 +91,35 @@ app.installTranslator(&translator); } + //! - Initializing required thread types + Threads::registerTypes(); + //! - Initializing Logger _Logger.init(); LOG_EVENT(QObject::tr("Application Started")); //! - Initializing USB Watcher - _USBWatcher.init(); + _USBWatcher.init(Threads::_USBWatcher_Thread); //! - Initializing CanBus Interface - if (_CanInterface.init()) { + if (_CanInterface.init(Threads::_CanFrame_Thread)) { _CanInterface.enableConsoleOut(_consoleoutCanInterface); } //! - Initializing CanBus Message Handler - _FrameInterface.init(); + _FrameInterface.init(Threads::_CanFrame_Thread); //! - Initializing CanBus Message Dispatcher - _MessageDispatcher.init(); - _MessageDispatcher.enableConsoleOut(_consoleoutFrameInterface); + if (_MessageDispatcher.init(Threads::_CanMessage_Thread)) { + _MessageDispatcher.enableConsoleOut(_consoleoutFrameInterface); + } //! - Initializing Application Controller - _ApplicationController.init(); - QObject::connect(&app, &QApplication::aboutToQuit, []() { - emit _ApplicationController.quit(); - }); - QObject::connect(&_ApplicationController, &ApplicationController::quit, &app, [](int retcode) { - QCoreApplication::exit(retcode); - qDebug() << QObject::tr("Application Terminated: %1").arg(retcode); - }, Qt::QueuedConnection); + _ApplicationController.init(Threads::_Application_Thread); ////! - Initializing GUI Controller - _GuiController.init(); + _GuiController.init(Threads::_Application_Thread); //! - Initializing Main Timer _MainTimer.init(); @@ -132,6 +129,13 @@ int app_exec = app.exec(); + // Due to Qt Error the CAN Device cannot be disable/enable from withing another thread + // (other than main thread which is the owner of the CanDevice owner). + // So it needs to be done here in main thread. + _CanInterface.quitDevice(); + + Threads::quitThreads(); + return app_exec; } #endif