packaged_task

 

/** @file  packaged_task.cpp
*  @note  
*  @brief
*  @author 
*  @date   2019-8-15
*  @note   
*  @history
*  @warning
*/
// packaged_task example
#include <iostream>     // std::cout
#include <future>       // std::packaged_task, std::future
#include <chrono>       // std::chrono::seconds
#include <thread>       // std::thread, std::this_thread::sleep_for

// count down taking a second for each value:
int countdown (int from, int to) {
    for (int i=from; i!=to; --i) {
        std::cout << i << '\n';
        std::this_thread::sleep_for(std::chrono::milliseconds(10));
    }
    std::cout << "Lift off!\n";
    return from-to;
}

int main ()
{
    std::packaged_task<int(int,int)> tsk (countdown);   // set up packaged_task
    std::future<int> ret = tsk.get_future();            // get future

    std::thread th (std::move(tsk),10,0);   // spawn thread to count down from 10 to 0

    // ...

    int value = ret.get();                  // wait for the task to finish and get result

    std::cout << "The countdown lasted for " << value << " seconds.\n";

    th.join();

    return 0;
}

 

posted @ 2019-08-15 21:10  PKICA  阅读(311)  评论(0编辑  收藏  举报