I have a question regarding the asio::deadline_timer  , it seems I need to run the  ioservice.run() all the time in order to update the timer, which is seems undesirable. Any idea how I can just start the timer and  wait for the callback instead?

I was playing around with this today too. It seems that you only need to call io_service::run() once (that will start the timer).