Почему этот метод закрытия рабочего потока не работает?
У меня есть приложение MFC, графический интерфейс которого имеет кнопку запуска и остановки. Кнопка "Пуск" вызывает функцию, которую я хочу периодически запускать в фоновом режиме. Мое решение состояло в том, чтобы использовать
SetTimer
функция для вызова OnTimer
функционируйте через регулярные промежутки времени. Затем эта функция создает поток с помощью AfxBeginThread
а затем заполняет структуру, которую я передаю потоку в качестве параметра. Все это прекрасно работает.То, что я хотел бы сделать сейчас, - это заставить кнопку остановки закончить поток. Я читал о
TerminateThread
но это кажется слишком рискованным. Поскольку я хочу закрыть рабочий поток из другого потока, я знаю, что не могу использовать AfxEndThread
, но я хотел бы знать, почему следующее решение не работает.Что я уже пробовал:
Я создал
int
переменная называется count
и установите его на 0
всякий раз, когда нажимается пуск, и установите его в 1
всякий раз, когда нажимается стоп.Структура, в которую я перехожу
AfxBeginThread
выглядеть такtypedef struct THREADSTRUCT { MyGUIDlg* _this; int flag; //you can add here other parameters you might be interested on } THREADSTRUCT;
При нажатии кнопки Пуск
SetTimer
вызывается функция, функция обратного вызова которой определена следующим образом:void MyGUIDlg::OnTimer(UINT_PTR nIDEvent) { THREADSTRUCT* _param = new THREADSTRUCT; _param->_this=this; _param->flag = count; AfxBeginThread(StartThread, _param); CDialog::OnTimer(nIDEvent); }
В моей функции StartThread я добавил следующее:
UINT MyGUIDlg::StartThread(LPVOID param) { THREADSTRUCT *ts = (THREADSTRUCT*)param; if((ts->flag)==1) { //Use AfxEndThread to close this thread } return 0; }
Но это, кажется, не работает, какие-нибудь мысли почему?