All pastes #595501 Raw Edit

Mine

public text v1 · immutable
#595501 ·published 2007-06-29 15:21 UTC
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();
}