Здравствуйте, nervous, Вы писали:
N>Hi all.
N>Есть рабочий поток с вычислениями.
N>Есть модальное диалоговое окно для отображения прогресса.
N>Надо дать пользователю возможность прервать поток.
N>Как правильно это сделать?
Можно, например, так:
#include <boost/thread/mutex.hpp>
#include <boost/thread.hpp>
void DoCalculations(int i);
void UpdateProgress(int i);
bool IsUserReadyToExit();
int const stepsNumber = 10;
boost::mutex monitor;
bool goingToExit = false;
void WorkThread()
{
for (int i = 0; i < stepsNumber; ++i)
{
DoCalculations(i);
{
boost::mutex::scoped_lock lk(monitor);
if (goingToExit)
return;
}
UpdateProgress(i);
}
}
int main()
{
boost::thread workThread(WorkThread);
while (!IsUserReadyToExit()) {}
{
boost::mutex::scoped_lock lk(monitor);
goingToExit = true;
}
workThread.join();
}