|
Boost Users : |
Subject: Re: [Boost-users] [asio] deadline_timer callback is not called
From: Daniele Barzotti (daniele.barzotti_at_[hidden])
Date: 2009-10-14 11:02:40
Igor R ha scritto:
>> io_service.run();
> Put some debug message here, to see when the io_service::run ends.
Hi Igor,
thanks for you reply.
I've put some debug code:
---------------------- START CODE ------------------------
void io_worker_thread(void)
{
io_service.run();
std::cout << ">>>> io_service.run() TERMINATED! <<<<" << endl;
};
---------------------- END CODE ------------------------
And the io_service.run() never returns, neither at the end of the
application.
This was caused because I had declared the io_service::work* like a
shared_ptr.
I change its declaration to simply:
static boost::asio::io_service::work* p_work;
And now io_service.run() ends only at the application end.
So, when I call the timer, the io_service should run!!
I try to add a call to io_service.run() after the timer async_wait:
---------------------- START CODE ------------------------
{
.....
//Start a new timer or renew it
rx_timer_.expires_from_now( boost::posix_time::milliseconds( 2000 ) );
// We managed to cancel the timer. Start new asynchronous wait.
rx_timer_.async_wait(
boost::bind(&WaveStream::handle_timeout, this, _1) );
io_service.run();
std::cout << "io_service.run() called " << endl;
}
void WaveStream::handle_timeout(const boost::system::error_code& error)
{
std::cout << "BOOST TIMER RAISED!!" << endl;
};
---------------------- END CODE ------------------------
..and in this manner the callback is called immediately after the
io_service.run() without waiting and in output I see:
BOOST TIMER RAISED!!
io_service.run() called
BOOST TIMER RAISED!!
io_service.run() called
BOOST TIMER RAISED!!
io_service.run() called
BOOST TIMER RAISED!!
io_service.run() called
BOOST TIMER RAISED!!
Suggestions?
Daniele.
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