Почему WaitForDeath () может уничтожить поток в образце? - PullRequest
0 голосов
/ 09 июня 2009
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 () может уничтожить поток?

Ответы [ 2 ]

1 голос
/ 09 июня 2009

Поток не уничтожается, он просто умирает сам по себе при выходе из функции, переданной в качестве параметра.

WaitForSingleObject ожидает этого завершения.

0 голосов
/ 10 июня 2009

На самом деле WaitForDead будет ожидать завершения потока (через обычный выход из функции) или истечет через 2 секунды и оставит поток живым. Возможно, вы захотите добавить объект синхронизации (то есть событие Win32), чтобы сигнализировать потоку о прекращении, и поток должен периодически проверять его и завершать работу при наличии сигнала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...