青島のしま〜Blue Islands〜


CPP_スレッドの使い方_MFC版

スレッドの使い方(MFC版)

AfxBeginThread()を使います.
サンプルは以下の通り
class CHoge
{
private:
	CWinThread *m_thread;	// スレッドオブジェクト
public:
	bool m_isAlive;	// スレッドの存続を示すフラグ

public:
	// デストラクタ
	~CHoge();
	// スレッドを開始する
	void RunThread();
	// スレッド関数
	// (※staticにすること)
	static UINT MyThreadFunc(LPVOID pParam);

}

// デストラクタ
CHoge::~CHoge()
{
	// スレッドの終了処理
	if (m_isAlive) {
		m_isAlive = false;
		// スレッドの終了を待つ
		if (m_thread != NULL) {
			WaitForSingleObject(m_thread->m_hThread, INFINITE);
			m_thread = NULL;	// 参照をはずす(deleteはMFCが勝手にやってくれるはず.(たぶん))
		}
	}
}

// スレッドを開始する
void CHoge::RunThread()
{
	m_isAlive = true;
	// スレッド呼び出し
	m_thread = AfxBeginThread(MyThreadFunc, this);
	// ↑自分の参照を渡す(スレッド関数はstaticなため,直接メンバ変数にアクセスできない.
	//   このインスタンスを通してメンバ変数にアクセスできるようにする)

	Sleep(10000);	// 10秒待つ
	m_isAlive = false;	// スレッドを終了させる
}

// スレッド関数
UINT CHoge::MyThreadFunc(LPVOID pParam)
{
	CHoge *cHoge = (CHoge *) pParam;	// クラスのインスタンスを得る
	while (cHoge->m_isAlive) { // m_isAliveがtrueの間続ける
		TRACE("hoge\n");	// デバッグ表示
		Sleep(1000);	// 1秒待つ
	}

	return 0;
}

// あとはmainからRunThread()を呼び出してください


作成日: 2004年02月15日18時30日41秒
更新履歴
2008年07月22日 2008年02月08日 2008年02月06日 2008年02月05日 2007年10月25日 2006年12月20日 2006年12月19日 2006年12月05日 2006年09月20日 2006年06月18日 2006年06月12日 2006年04月22日 2006年03月30日 2006年02月28日 2006年02月23日 2006年02月18日 2006年01月13日 2005年12月21日