Asio und Futures



  • Hi,
    ich sitz gerade auf dem schlauch.. bisher mache ich in etwa folgendes wenn ich futures benutze:

    boost::packaged_task<int> pt(calc_something);
    boost::unique_future<int> fi=pt.get_future();
    
    //bisher:
    boost::thread task(boost::move(pt));
    
    // bla
    
    result = 2*fi.get();
    

    Allerdings möchte ich jetzt dass sich z.B. zwei "worker-threads" unter anderem um anfallende futures kümmern. Ich dachte also ich mache das am besten mit asio, das habe ich auch schon an anderer stelle genutzt und gefällt mir ganz gut. Aber irgendwie steh ich grad auf dem Schlauch:

    //irgendwo gibts mal sowas:
    asio::io_service io_service;
    asio::io_service::work work(io_service);
    // dann bekommt der io_service noch ein paar threads die io_service::run ausführen
    
    //irgendwoanders habe ich wieder mein future/packaged_task pt und fi, aber
    //das hier (und anderes) anstelle der thread-erstellung wie oben geht leider nicht:
    io_service.post(pt); /*oder*/ io_service.post(boost::move(pt));
    

    Ich komme leider grad auf keinen grünen zweig. Hat jemand nen Tip für mich wie ich das machen könnte?



  • packaged_task ist noncopyable von daher kann man das in einen shared_ptr packen und mit bind übergeben

    io_service.post(boost::bind(&boost::packaged_task<int>::operator(), pt));
    

    Allerdings bin ich noch nicht drauf gekommen warum das nicht auch einfach mit move geht... Irgendwer?


Log in to reply