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