Create timer with boost::asio

user3315755

I want to create periodic task that perform 1 time per second. But in my case boost::asio::deadline_timer should not be global variable.

boost::asio::io_service _io;

void handler(const boost::system::error_code, int a) {
    boost::asio::deadline_timer timer(_io);
    //do task
    timer.expires_from_now(boost::posix_time::seconds(1));
    timer.async_wait(std::bind(handler, _1, a));
}

boost::asio::deadline_timer timer(_io);
timer.expires_from_now(boost::posix_time::seconds(1));
timer.async_wait(std::bind(handler, _1, 1));
sehe

Update I get it. You want dynamically allocated timers?

Live On Coliru

#include <boost/asio.hpp>
#include <boost/make_shared.hpp>

using namespace boost;
using Timer = shared_ptr<asio::deadline_timer>;

asio::io_service _io;

void handler(int a, const system::error_code& = {}, Timer timer = make_shared<Timer::element_type>(_io)) {
    std::cout << "hello world\n";
    timer->expires_from_now(posix_time::seconds(1));
    timer->async_wait(bind(handler, a, asio::placeholders::error, timer));
}

int main() {
    handler(42);
    _io.run();
}

The trick is boost::bind binds to boost::shared_ptr and keep a copy of it - extending the lifetime of the timer object


A deadline timer, firing every second, and not using any globals:

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

using namespace boost;

int main() {

    thread t([] {
            asio::io_service io;
            asio::deadline_timer dt(io, posix_time::seconds(1));
            function<void(system::error_code)> ll = [&](system::error_code ec) {
                if (!ec) {
                    puts("hello world");
                    dt.expires_from_now(posix_time::seconds(1));
                    dt.async_wait(ll);
                }
            };
            ll({});
            io.run();
        });

    this_thread::sleep_for(chrono::seconds(2));
    std::cout << "async\n";

    t.join();
}

Output:

Hello world
Hello world
async
Hello world
Hello world
....

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

실행 중 boost :: asio :: deadline_timer 사용 오류

분류에서Dev

boost :: asio asyn_read with timer가 좋은 생각입니까?

분류에서Dev

무한 루프 대 boost :: asio :: deadline_timer C ++ 성능

분류에서Dev

boost :: asio :: deadline_timer가 핸들러를 호출하지 않습니다.

분류에서Dev

boost asio deadline_timer async_wait(N seconds) twice within N seconds cause operation canceled

분류에서Dev

boost :: asio :: spawn yield as callback

분류에서Dev

취소 할 때 boost :: asio :: yield_context를 deadline_timer 핸들러로 사용할 수 있습니까?

분류에서Dev

boost :: asio에서 여러 실행 시간을 가진 하나의 deadline_timer를 가질 수 있습니까?

분류에서Dev

boost :: asio의 Valgrind 오류

분류에서Dev

Taking the port from Boost Asio socket

분류에서Dev

`boost :: asio :: streambuf`에서 파생

분류에서Dev

boost :: asio 데이터 소유`ConstBufferSequence`

분류에서Dev

boost :: asio :: read () 블록을 영원히

분류에서Dev

Clear boost::asio::io_service after stop()

분류에서Dev

C ++ Boost.Asio 개체 수명

분류에서Dev

Boost asio가 HTTP POST를 받습니까?

분류에서Dev

boost_1_55_0 asio 연결

분류에서Dev

"2 단계"async_read with boost asio

분류에서Dev

"2 단계"async_read with boost asio

분류에서Dev

Boost ASIO로 예외 처리 향상

분류에서Dev

boost :: asio :: serial_port 및 RTS 핀

분류에서Dev

boost :: asio 읽기 / 쓰기 문제

분류에서Dev

Boost ASIO에서 콜백 취소

분류에서Dev

Boost :: Asio-read 또는 read_until?

분류에서Dev

ASIO handler arguments and boost::bind, compile time error

분류에서Dev

Boost 및 asio로 스레드 실행

분류에서Dev

boost :: asio 쓰기 : 깨진 파이프

분류에서Dev

ZeroMQ가 boost asio보다 느립니까?

분류에서Dev

시리얼 직렬화 및 boost :: asio?

Related 관련 기사

  1. 1

    실행 중 boost :: asio :: deadline_timer 사용 오류

  2. 2

    boost :: asio asyn_read with timer가 좋은 생각입니까?

  3. 3

    무한 루프 대 boost :: asio :: deadline_timer C ++ 성능

  4. 4

    boost :: asio :: deadline_timer가 핸들러를 호출하지 않습니다.

  5. 5

    boost asio deadline_timer async_wait(N seconds) twice within N seconds cause operation canceled

  6. 6

    boost :: asio :: spawn yield as callback

  7. 7

    취소 할 때 boost :: asio :: yield_context를 deadline_timer 핸들러로 사용할 수 있습니까?

  8. 8

    boost :: asio에서 여러 실행 시간을 가진 하나의 deadline_timer를 가질 수 있습니까?

  9. 9

    boost :: asio의 Valgrind 오류

  10. 10

    Taking the port from Boost Asio socket

  11. 11

    `boost :: asio :: streambuf`에서 파생

  12. 12

    boost :: asio 데이터 소유`ConstBufferSequence`

  13. 13

    boost :: asio :: read () 블록을 영원히

  14. 14

    Clear boost::asio::io_service after stop()

  15. 15

    C ++ Boost.Asio 개체 수명

  16. 16

    Boost asio가 HTTP POST를 받습니까?

  17. 17

    boost_1_55_0 asio 연결

  18. 18

    "2 단계"async_read with boost asio

  19. 19

    "2 단계"async_read with boost asio

  20. 20

    Boost ASIO로 예외 처리 향상

  21. 21

    boost :: asio :: serial_port 및 RTS 핀

  22. 22

    boost :: asio 읽기 / 쓰기 문제

  23. 23

    Boost ASIO에서 콜백 취소

  24. 24

    Boost :: Asio-read 또는 read_until?

  25. 25

    ASIO handler arguments and boost::bind, compile time error

  26. 26

    Boost 및 asio로 스레드 실행

  27. 27

    boost :: asio 쓰기 : 깨진 파이프

  28. 28

    ZeroMQ가 boost asio보다 느립니까?

  29. 29

    시리얼 직렬화 및 boost :: asio?

뜨겁다태그

보관