Thead, насколько я втречался с подобным, мне больше всего понравилось такое:
void LongProcess()
{
MSG msg;
for (;;;)
{
//делаем возможность прервать
if(::PeekMessage(&msg,0,0,0,PM_REMOVE))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
if(m_bStop){ return; }
{
//здесь часть действия
}
}
}
//запуск процесса
Go()
{
m_bStop=false;
LongProcess();
m_bStop=true;
}
//обработчик нажатия кнопки STOP
void OnbnSTOP() { m_bStop=true; }
Но есть один подводный камень: нельзя давать программе закрываться во время работы цикла выборки сообщений - прога зависает.
Для этого в главном окне (зависит от того, какое оно) делаем
void CMainFrame::OnClose()
{
if(!m_bStop) //неправильно
{
::AfxMessageBox("сначала остановите процесс");
return;
}
CFrameWnd::OnClose();
}
здесь "//неправильно" имеется в виду - доступ к переменной m_bStop показан схематически, на самом деле всё зависит от места определения этой переменной.