#include #include #include class ClassA { public: ClassA() : testvar (0) {} void operator ()() { boost::xtime sleeping_time; int tester = testvar; std::cout << "new: " << tester << std::endl; do { boost::xtime_get(&sleeping_time, boost::TIME_UTC); sleeping_time.sec += 1; boost::thread::sleep(sleeping_time); SetVar(10); std::cout << "nothing new... " << GetVar() << std::endl; } while (tester == testvar); std::cout << "news! new: " << testvar << std::endl; } int GetVar() { return testvar; } void SetVar(int Var) { testvar = Var; } private: int testvar; }; struct thread_test { thread_test(ClassA& Atest) : mAtest (Atest) {} void operator ()() { boost::xtime sleeping_time; int t = 0; while (5 > mAtest.GetVar()) { t = mAtest.GetVar(); std::cout << "test ... t: " << t << std::endl; boost::xtime_get(&sleeping_time, boost::TIME_UTC); sleeping_time.sec += 1; boost::thread::sleep(sleeping_time); } std::cout << "bigger" << std::endl; } ClassA& mAtest; }; struct thread_test2 { thread_test2(ClassA& Atest) : mAtest (Atest) {} void operator ()(); ClassA& mAtest; }; void thread_test2::operator ()() { int t = 0; boost::xtime sleeping_time; boost::xtime waiting_time; boost::xtime cur_time; boost::xtime_get(&cur_time, boost::TIME_UTC); while (cur_time.sec + 20 > waiting_time.sec ) { mAtest.SetVar(++t); std::cout << "test2 ... t: " << t << std::endl; boost::xtime_get(&sleeping_time, boost::TIME_UTC); sleeping_time.sec += 3; boost::thread::sleep(sleeping_time); boost::xtime_get(&waiting_time, boost::TIME_UTC); } std::cout << "finished" << std::endl; } int main() { ClassA testA; thread_test tester(testA); thread_test2 tester2(testA); boost::thread test(tester); boost::thread test2(tester2); boost::thread test3(testA); test.join(); test2.join(); test3.join(); }