Указатели на темы - PullRequest
       18

Указатели на темы

1 голос
/ 13 мая 2010

Предположим, у меня есть указатель на нить, подобную этой

CWinThread *m_pThread = AfxBeginThread(StartThread, this, THREAD_PRIORITY_NORMAL, 0, 0);

Теперь в моей функции StartThread предположим, что я выполнил все операции, и функция вернулась вот так

UINT CClassThread::StartThread(LPVOID pVoid)
{
     return true;
}

Будет ли мой m_pThread недействительным при выполнении оператора return?

1 Ответ

5 голосов
/ 13 мая 2010

Да, он будет недействительным, потому что он будет удален в конце потока. Однако, если вы установите CWinThread::m_bAutoDelete на FALSE, CWinThread* не будет удален. Я просто погуглил ответ и нашел его здесь: http://msdn.microsoft.com/en-us/library/48xz4yz9(VS.80).aspx

Кроме того, если бы вы использовали pthreads (потоки Unix), ответ был бы отрицательным. Когда поток завершается, его дескриптор остается действительным до тех пор, пока вы не вызовете pthread_join (дождитесь завершения потока, освободите его и получите его возвращаемое значение) или pthread_detach (сообщите потоку, чтобы он освободил себя после завершения).

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