Boost logo

Boost Users :

Subject: [Boost-users] [boost::Statechart] posting a "serial timeout" event
From: Andre de Jong (Andre.deJong_at_[hidden])
Date: 2013-03-25 04:27:16


I've been using boost's asynchronous statechart to write a program. In this program I communicate with another device using an asynchronous serial port. I have a state that waits for a confirmation from the device over the serial port and then posts a "confirmation received" event. This works well but, I would also like to implement a "timeout" event.

In previous programs I had been using switch case statements for my state machines where I had code that could be run each time the loop was run. This meant I could run code and check if I should change state due to something timing out. Like this:

while(1){
    switch (state){
        case 0:{
            sendMessage();
            state = 1;
            sendTime = boost::chrono::steady_clock::now();
        }
        break;
        case 1:{
            if (isConfirmationReceived()){
                // do something
                state = 2;
            }
            else if (boost::chrono::steady_clock::now() > start + boost::chrono::duration<double>(WAIT_LENGTH)){
                //do something
                state = 3;
            }
        }
        break;
        // etc etc

    }
}

How would I implement something like this using boost::StateChart? Or, should i be thinking about this a completely different way?



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net