Boost.Asio: каково поведение deadline_timer с истечением 0 миллисекунд - PullRequest
1 голос
/ 13 марта 2012

Каково поведение deadline_timer, срок действия которого равен 0 миллисекундам?

В моем коде у меня есть:

boost::asio::io_service ios;
...
boost::asio::deadline_timer ptimer(ios);
ptimer.expires_from_now(boost::posix_time::milliseconds(duration)); // Duration might be 0 sometimes
boost::system::error_code ec;
ptimer.async_wait(boost::bind(&SomeTimeOutHandler, this, ec));

Я обнаружил, что если duration == 0, обработчик SomeTimeOutHandler никогда не вызывается.

Я хочу, чтобы его вызвали.

Однако, если я перейду на duration == 1, обработчик будет вызван.

Итак, каково будет точное поведение, когда срок действия deadline_timer равен 0?

Edit:

Но работает следующая тестовая программа HelloWorld (предложено @Roger):

#include <iostream>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/thread.hpp>

void SomeTimeOutHandler(const boost::system::error_code& ec)
{
    if (ec)
    {
        std::cout << "SomeTimeOutHandler error_code" << std::endl;
    }
    else
    {
        std::cout << "I'm in good shape" << std::endl;
    }
}

void Test(int duration)
{
    boost::asio::io_service ios;
    boost::asio::deadline_timer ptimer(ios);

    ptimer.expires_from_now(boost::posix_time::milliseconds(duration));
    boost::system::error_code ec;

    ptimer.async_wait(boost::bind(&SomeTimeOutHandler, ec));

    ios.run();

//    boost::this_thread::sleep(boost::posix_time::milliseconds(duration * 2 + 1000));
}


int main(int argc, char* argv[])
{
    Test(10); // Test(0);

    return 0;
}
...