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