#pragma once #ifndef TTHREADP_H #define TTHREADP_H #include #include "tthreadmessage.h" //===================================================================== //====================================== // TThreadMessageDispatcher class //-------------------------------------- // NOTE: This class should eventually be moved to tthreadmessagep.h... class TThreadMessageDispatcher final : public QObject // singleton { Q_OBJECT public: TThreadMessageDispatcher(); Q_SIGNALS: void signaled(TThread::Message *msg); void blockingSignaled(TThread::Message *msg); protected Q_SLOTS: void onSignal(TThread::Message *msg); public: void emitSignaled(TThread::Message *msg); void emitBlockingSignaled(TThread::Message *msg); static void init(); static TThreadMessageDispatcher *instance(); }; //===================================================================== namespace TThread { // Forward declarations class ExecutorId; class ExecutorImpSlots; } //===================================================================== //============================== // ExecutorImpSlots class //------------------------------ class TThread::ExecutorImpSlots final : public QObject { Q_OBJECT public: ExecutorImpSlots(); ~ExecutorImpSlots(); // The following is provided to ensure that point #3 in Qt reference in page // "Thread support in Qt" // is satisfied: // "You must ensure that all objects created in // a thread are deleted before you delete the QThread." // So, specifically, thread creation should happen only in the main thread, // not in worker threads. void emitRefreshAssignments(); Q_SIGNALS: void refreshAssignments(); public Q_SLOTS: void onTerminated(); void onRefreshAssignments(); }; #endif