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秒
![[トップページ]](../lib/img//top.gif)
![[一覧]](../lib/img//list.gif)
![[検索]](../lib/img//search.gif)
![[ヘルプ]](../lib/img//help.gif)
![[ログイン]](../lib/img//login.gif)