Blob Blame Raw
#pragma once

#ifndef TTHREADP_H
#define TTHREADP_H

#include <QObject>

#include "tthreadmessage.h"

//=====================================================================

//======================================
//    TThreadMessageDispatcher class
//--------------------------------------

//NOTE: This class should eventually be moved to tthreadmessagep.h...
class TThreadMessageDispatcher : 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 : 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