#pragma once
#include <Windows.h>
// マルチスレッド繰り返し処理の基本クラス
class BaseProcess
{
private:
bool _messageQueReady; // メッセージキューの準備状況
HANDLE _threadHandle; // スレッドハンドル
DWORD _threadID; // スレッドID
bool _mainThread; // メイン(GUI)スレッドかどうか
DWORD _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);
};