rendered paste body#include <iostream>
#include <boost/thread/thread.hpp>
#include <boost/thread/xtime.hpp>
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();
}