Как уничтожить Поток MFC?

Похоже, кто-то уже писал об этом.

https://support.google.com/chrome/thread/3101009?hl=en

10
задан zar 30 August 2017 в 18:16
поделиться

2 ответа

Активно уничтожение потока:

Используйте возвращаемое значение 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.

Еще лучшие пути:

При необходимости еще в большем количестве управления, можно использовать что-то как условия повышения.

19
ответ дан 3 December 2019 в 15:53
поделиться

Необходимо ожидать, до потока действительно все наполняют.

if(WaitForSingleObject(thread_handle, INFINITE) == WAIT_OBJECT_0) 
    ;//all right
else
    ;//report error

остерегайтесь использования функция TerminateThread, это очень опасно.

1
ответ дан 3 December 2019 в 15:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: