BOOL PumpMessage(void)После этого в тело той функции/функций, которые вычисляются наиболее долго необходимо вставить вызовы этой функции (например, в тело цикла, ведь ваша долгоиграющая функция использует циклы, не правда ли?). В общем-то, достаточно это сделать в наиболее «узком» месте, но тут действует принцип «Кашу маслом не испортишь». Если вы хотите иметь возможность остановить процесс во время его выполнения, то вам необходимо следующим образом модифицировать функцию:
{
CWinThread *pThread = AfxGetThread();
MSG msg;
while(::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
if (!pThread->PumpMessage())
break;
}
return TRUE;
};
BOOL PumpMessage(void)и ее вызов тогда будет выглядеть следующим образом:
{
CWinThread *pThread = AfxGetThread();
MSG msg;
while(::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
if (!pThread->PumpMessage())
break;
}
if(Флаг останова == TRUE)
return FALSE;
return TRUE;
};
if(PumpMessage() == TRUE)Флаг останова (например, статический BOOL) можно устанавливать в TRUE по нажатию кнопки.
{
//прекратить процесс вычисления. Можно просто сделать return.
}
P.S. Вышеприведенный вариант PumpMessage так же хорош тем, что позволяет во время длинный вычислений не только нажимать кнопки и прочее, но так же пользоваться горячими клавишами.