2009-06-09 9 views
0
class Thread 
{ 
public: 
    Thread (DWORD (WINAPI * pFun) (void* arg), void* pArg) 
    { 
     _handle = CreateThread (
     0, // Security attributes 
     0, // Stack size 
     pFun, 
     pArg, 
     CREATE_SUSPENDED, 
     &_tid); 
    } 
    ~Thread() { CloseHandle (_handle); } 
    void Resume() { ResumeThread (_handle); } 
    void WaitForDeath() 
    { 
     WaitForSingleObject (_handle, 2000); 
    } 
private: 
    HANDLE _handle; 
    DWORD _tid;  // thread id 
}; 

どのようにWaitForDeath()がスレッドを強制終了できますか?WaitForDeath()はどのようにしてサンプルのスレッドを強制終了できますか?

+0

クラスの使用方法を示す必要があります。 –

答えて

1

スレッドは強制終了されません。パラメータとして渡された関数が終了すると、スレッドは自動的に終了します。

WaitForSingleObjectは、その終了を待ちます。

+0

マイナーニックピック:スレッド関数が終了した後にスレッドが終了し、スレッドへのすべてのハンドルが閉じられます。この場合、スレッドはデストラクタで 'CloseHandle()'を呼び出した後に実際には消滅します。 –

0

実際には、WaitForDeadはスレッドが終了するのを(通常の関数の終了によって)待つか、2秒後にタイムアウトしてスレッドを存続させます。同期オブジェクト(Win32イベント)を追加して、スレッドを終了するように通知し、スレッドが定期的にそのスレッドをチェックし、通知された場合は終了することができます。

関連する問題