You mean using asio::io_service::post instead of signals or using asio::serial_port instead of my serial classes?
No I just mean using asio::io_service as a functor queue processor, but if you use asio you definitely can benefit from its serial_port class as well.
If you have a minimal code snippet I will grateful!
If you want to see a working code with asio, you can refer to one the asio examples, but in general I mean the following scheme (pseudo-code!): // encapsulates yours or asio i/o object, like socket, serial_port etc. class connection : public boost::enable_shared_from_this<connection> { public: connection(boost::asio::io_service &io) : io_(io) {} public: void send(data_type data) { // since send() might be called from a client thread, do not process the data here, // just post it to the io_ thread(s), where the data will be delivered to the socket/port io_.post(&connection::do_send, shared_from_this(), data); } private: // this method is always called within io_ thread(s) void data_received() { //issue the signal } void do_send(data_type data) { // send the data } }; // listens to the connection; class data_receiver { void data_received(data_type data) { doSomething(); connection->send(somethingElse); } };