ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • asio::io_service + promise + future background worker
    프로그래밍/코드 조각 2016. 2. 15. 07:45
    반응형

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    #include <iostream>
    #include <future>
    #include <type_traits>
    #include <boost/asio.hpp>
     
    using namespace boost::asio;
     
    io_service ios;
    io_service::work work{ ios };
     
    template < typename Func >
    auto post(Func&& func)
    {
      using return_type = decltype(func());
      
      auto promise = std::make_shared<std::promise<return_type>>();
      auto future = promise->get_future();
     
      ios.post
        (
          [promise, func]
          {
            promise->set_value(func());
          }
        );
     
      return future;
    }
     
     
    int main()
    {
      auto async_res = std::async
        (
          std::launch::async, 
          [] 
          {
            ios.run();
          }
        );
     
      int a = 10;
      int b = 20;
     
      auto future = post([a, b] { return a*b; });
     
      std::cout << future.get() << std::endl;
     
      return 0;
    }
    cs



    반응형
Designed by Tistory.