c++ - Pass by reference vs. Pass by pointer: Boost threads and deadline timer -
i have simple program outputs increasing integers in span of 1 second using boost libraries:
#include <iostream> #include <boost/thread/thread.hpp> #include <boost/asio.hpp> using namespace std; void func1(bool* done) { float i=0; while (!(*done)) { cout << << " "; i++; } return; } void timer(bool* done, boost::thread* thread) { boost::asio::io_service io; boost::asio::deadline_timer timer(io, boost::posix_time::seconds(1)); timer.wait(); *done = true; return; } int main() { bool done = false; boost::thread thread1(func1, &done); boost::thread thread2(timer, &done, &thread1); thread2.join(); thread1.join(); }
that iteration of code works, had had bool defined in main function passed reference functions func1 , thread. i.e.:
void func1(bool& done) /*...*/ while (!(done)) /* ... */ void timer(bool& done, boost::thread* thread) /*...*/ done = true;
with thread definitions:
boost::thread thread1(func1, done); boost::thread thread2(timer, done, &thread1);
when execute that, loop within func1() never terminates! i've added breakpoint @ return of timer(), , ide (ms vc++ express 2010) indicates bool done indeed has value of true, within func1().
any insight why happening?
to pass argument reference, use boost:ref
:
boost::thread thread1(func1, boost::ref(done));
Comments
Post a Comment