Re: boost::thread
От: Azir Беларусь  
Дата: 19.06.04 22:31
Оценка: 1 (1)
Здравствуйте, 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();
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.