Активно уничтожение потока:
Используйте возвращаемое значение AfxBeginThread
(CWinThread*
) получить дескриптор потока (m_hThread
) затем передача, которые обрабатывают к TerminateThread Win32 API. Это не безопасный способ завершить потоки, хотя, поэтому продолжайте читать.
Ожидание потока для окончания:
Используйте возвращаемое значение AfxBeginThread
(CWinThread*
) для получения участника m_hThread затем используйте WaitForSingleObject(p->m_hThread, INFINITE);
Если эта функция возвращается WAIT_OBJECT_0
, затем поток закончен. Вместо INFINITE
Вы могли также поместить количество миллисекунд для ожидания, прежде чем тайм-аут произойдет. В этом случае WAIT_TIMEOUT
будет возвращен.
Передача сигналов потоку, что это должно закончиться:
Прежде, чем сделать WaitForSingleObject
просто установите некоторый флаг, из которого должен выйти поток. Затем в Вашем основном цикле потока Вы проверили бы на это, bool оценивают и повреждают бесконечный цикл. В Вашем деструкторе Вы установили бы этот флаг, затем делают a WaitForSingleObject
.
Еще лучшие пути:
При необходимости еще в большем количестве управления, можно использовать что-то как условия повышения.
Необходимо ожидать, до потока действительно все наполняют.
if(WaitForSingleObject(thread_handle, INFINITE) == WAIT_OBJECT_0)
;//all right
else
;//report error
остерегайтесь использования функция TerminateThread, это очень опасно.