Newer
Older
PrismSoftware / ECTrainer2 / BaseProcess.h
#pragma once

#include <Windows.h>
#include <string>

class ECTrainer;
enum class ECTMSG;


// マルチスレッド繰り返し処理の基本クラス
class BaseProcess
{
protected:
	ECTrainer* _pEct;
	bool _messageQueReady;	// メッセージキューの準備状況
	HANDLE _threadHandle;	// スレッドハンドル
	DWORD _threadID;		// スレッドID
	bool _mainThread;		// メイン(GUI)スレッドかどうか

	// スレッドエントリポイント
	static DWORD WINAPI ThreadEntry(LPVOID lpParameter);
	// 非メッセージ時の処理
	virtual bool Routine();
	// メッセージ処理
	virtual bool EventProc(MSG& msg);
	// クラス名取得(派生クラスでオーバーライドすればFPS表示)
	virtual std::string ClassName() { return ""; }	// FPS表示

public:
	// コンストラクタ
	BaseProcess(ECTrainer* pEct);
	// スレッド起動
	virtual bool Launch();
	// 初期化
	virtual bool Init();
	// スレッド本体
	virtual bool MainLoop();
	// スレッド終了待ち 正常終了でハンドル閉じる
	virtual bool WaitForExit(DWORD timeOut = 3000);
	// メッセージを送る(非同期)
	virtual bool PostMsg(ECTMSG msg, WPARAM wp = 0, LPARAM lp = 0);
};