
Hello folks, we recently got stuck with one minor inconvenience with boost thread (which we fixed), but somehow we cannot explain why it did not work. We are using 1.34.1 and VS 2005 SP1 the sample that did not work properly was aproximately like this (not compilable) class Super_Func { protected: bool * _die; SomeObscureIPWorksBasedDaemon _daemon; public: Super_Func(bool* t) : _die(t), _daemon("localhost", 12345) {} void operator()() { while (!*_die) { _daemon.do_background_stuff(); if (_daemon.has_data()) us_process_data(_daemon.get_data()); } } }; int main() { bool die = false; Super_Func sf(&die); boost::thread main_thread(boost::ref(sf)); main_thread.join(); return 0; } Everything compiled without hick-up, and even created the thread (well, at least debugger showed it, and stopped in while loop). But all the TCP/IP related stuff in thread did not work (was sort of stuck). Once we replaced above with void Super_Func(bool* die) { SomeObscureIPWorksBasedDaemon _daemon("localhost", 12345); while (!*_die) { _daemon.do_background_stuff(); if (_daemon.has_data()) us_process_data(_daemon.get_data()); } } int main() { bool die = false; boost::thread main_thread(boost::bind(Super_Func, &die)); main_thread.join(); return 0; } everything magically worked! Well, if I do not miss some obvious error somewhere in the first example (which I might)... then I do not know why it did not work. I was under impression that ref() is just a way to pass "reference" to the anything (including functional object), so it will create copy of ref, and not Super_Func class itself. Any insight is appreciated. Thank you very much, Andrey.