Здравствуйте, 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;
_>}
_>
Господа! Как посылать сигналы исполняющемуся потоку (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;
}
Здравствуйте, Demon, Вы писали:
_>>_>>class worker : public boost::noncopyable
_>> thread t( boost::ref(w) );
_>>
Спасибо!