Здравствуйте, nervous, Вы писали:
N>Hi all.
N>Есть рабочий поток с вычислениями.
N>Есть модальное диалоговое окно для отображения прогресса.
N>Надо дать пользователю возможность прервать поток.
N>Как правильно это сделать?
Я смотрю тут у ребят мозги совсем затекли.
Вот самое простое, эффективное и верное решение.
BYTE nbDoCalc = 1;
HANDLE hThread; // = _beginthreadex
HWND hwndProgressBar;
void WorkThread()
{
while( nbDoCalc )
{
// Do Job
// SendMessage -> hwndProgressBar
...
};
};
MyDlgBox::OnStopCalc()
{
nbDoCalc = 1;
// ждем когда тред реально завершится
WaitForSingleObject( hThread, INFINITE );
};
Будет работать даже в многопроцессорном
окружении.
WBR, Alexei K.