Сигнал рабочему потоку
От: s_anatoli Украина http://koresha.org/sakhnik
Дата: 23.09.04 09:08
Оценка:
Господа! Как посылать сигналы исполняющемуся потоку (boost::thread)? Следующая программа никогда не завершается, отладчик показывает, что указатели this в функциях void operator()() и void Stop() разные, словом, библиотека пользуется копией рабочего объекта...
#include <iostream>
#include <boost/thread/thread.hpp>

using namespace std;
using namespace boost;

class worker
{
public:
    worker(): _stop(false) {}
    void operator()()
    {
        while (!_stop)
            cout << ".";
    }
    void Stop() { _stop = true; }
private:
    volatile bool _stop;
};

int main(int argc, char* argv[])
{
    worker w;
    thread t(w);
    w.Stop();
    t.join();
    return 0;
}
http://www.koresha.org/sakhnik/sakhnik.gif
Жизнь — это чудо! Только вперёд: sakhnik@jabber.kiev.ua
Re: Сигнал рабочему потоку
От: Demon Россия  
Дата: 23.09.04 09:13
Оценка: 5 (1)
Здравствуйте, s_anatoli, Вы писали:

_>... словом, библиотека пользуется копией рабочего объекта...

_>
_>#include <iostream>
_>#include <boost/thread/thread.hpp>

_>using namespace std;
_>using namespace boost;

_>class worker : public boost::noncopyable
_>{
_>public:
_>    worker(): _stop(false) {}
_>    void operator()()
_>    {
_>        while (!_stop)
_>            cout << ".";
_>    }
_>    void Stop() { _stop = true; }
_>private:
_>    volatile bool _stop;
_>};

_>int main(int argc, char* argv[])
_>{
_>    worker w;
_>    thread t( boost::ref(w) );
_>    w.Stop();
_>    t.join();
_>    return 0;
_>}
_>
Re[2]: Сигнал рабочему потоку
От: s_anatoli Украина http://koresha.org/sakhnik
Дата: 23.09.04 09:25
Оценка:
Здравствуйте, Demon, Вы писали:

_>>
_>>class worker : public boost::noncopyable
_>>    thread t( boost::ref(w) );
_>>


Спасибо!
http://www.koresha.org/sakhnik/sakhnik.gif
Жизнь — это чудо! Только вперёд: sakhnik@jabber.kiev.ua
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.