包装task
#include <iostream>
#include <thread>
#include <future>
std::string promise_string(std::string str)
{
for (int i = 0; i < 100; i++)
{
std::this_thread::sleep_for(std::chrono::milliseconds(10));
std::cout << "sleep" << std::endl;
}
std::string str1 = "the current function name is ";
str1.append(__FUNCTION__);
return str + str1;
}
// add new work item to the pool
template<class F, class... Args>
auto senqueue(F&& f, Args&&... args)
-> std::future<typename std::result_of<F(Args...)>::type>
{
using return_type = typename std::result_of<F(Args...)>::type;
auto task = std::make_shared< std::packaged_task<return_type()> >(
std::bind(std::forward<F>(f), std::forward<Args>(args)...)
);
std::future<return_type> res = task->get_future();
(*task)();
return res;
}
int main()
{
// senqueue(promise_string, "666");
using return_type = std::string;
auto task = std::make_shared< std::packaged_task<return_type()> >(
std::bind(std::forward<std::string(std::string)>(promise_string),"6666")
);
(*task)();
// autp p = (*task)();
/*std::future<std::string> fu = pTask.get_future();
std::thread tr(std::move(pTask), "测试 ");
std::string strR = fu.get();
std::cout << "the result is:" << strR.c_str() << std::endl;
tr.join();*/
system("pause");
// pTask("555");
}