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

#include <Windows.h>


// マルチスレッド繰り返し処理の基本クラス
class BaseProcess
{
private:
	bool _messageQueReady;	// メッセージキューの準備状況
	HANDLE _threadHandle;	// スレッドハンドル
	DWORD _threadID;		// スレッドID
	bool _mainThread;		// メイン(GUI)スレッドかどうか
	int _fpsMeasureTime;	// FPSを算出する時間(ms)

protected:
	void* _pUserdata;

	// スレッドエントリポイント
	static DWORD WINAPI ThreadEntry(LPVOID lpParameter);
	// ループ直前処理
	virtual bool InitLoop() { return true; }
	// 非メッセージ時の処理
	virtual bool Routine() { return true; }
	// メッセージ処理
	virtual bool EventProc(MSG& msg) { return true; }
	// FPS表示
	virtual void FPS(double fps) { }

public:
	// コンストラクタ
	BaseProcess(void* pUD);
	// 初期化
	virtual bool Init();
	// 新スレッドでループ処理開始
	virtual bool Launch();
	// スレッドを生成せずループ処理開始
	virtual bool MainLoop();
	// スレッド終了待ち 正常終了でハンドル閉じる
	virtual bool WaitForExit(DWORD timeOut = 3000);
	// メッセージを送る(非同期)
	virtual bool PostMsg(int msgid, WPARAM wp = 0, LPARAM lp = 0);
};