スレッドについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
スモモ

スレッドについて

#1

投稿記事 by スモモ » 15年前

お世話なっています。

スレッドなぜ終了しないのか?わからないです。

ご教授の程、よろしくお願いします。



#include <process.h>
#include <windows.h>

class C_Thread
{
HANDLE m_hThread;
HANDLE m_hEvent;
static void CallFunc( LPVOID pParam );
protected:
virtual void MainFunc() = 0;
public:
C_Thread(void);
~C_Thread(void);
void EndWait();
};

C_Thread::C_Thread(void)
{
m_hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
//スレッド作成
m_hThread = (HANDLE)_beginthread(CallFunc,0,this);
}

//
C_Thread::~C_Thread(void)
{
//ハンドルクローズ
CloseHandle(m_hThread);
}

void C_Thread::CallFunc(LPVOID pParam)
{
C_Thread* pP = (C_Thread*)pParam;
pP->MainFunc();
pP->~C_Thread();
}

void C_Thread::EndWait()
{
WaitForSingleObject(m_hEvent,INFINITE);
}

class C_Threadtest : public C_Thread
{
public:
void MainFunc()
{
static int i;
while(2 > i++)MessageBox(NULL,"C_Threadtest","OK",MB_OK|MB_ICONINFORMATION);
return S_OK;
}
};

INT WINAPI WinMain( HINSTANCE , HINSTANCE, LPSTR, INT )
{
C_Threadtest test;
test.EndWait();
return 0;
}


よろしくお願いします。

ISLe

Re:スレッドについて

#2

投稿記事 by ISLe » 15年前

とりあえず_beginthreadで得たスレッドハンドルは自分でCloseHandleしてはいけません。

WaitForSingleObjectの待機を抜けるにはSetEvent(m_hEvent)を実行する必要があります。

スレッドハンドルを使えばイベントオブジェクト不要です。
WaitForSingleObject(m_hThread, INFINITE);

スモモ

Re:スレッドについて

#3

投稿記事 by スモモ » 14年前

ISLe さん

ありがとうございます。

解決いたしました。

閉鎖

“C言語何でも質問掲示板” へ戻る