/*
thread.cpp
演示了创建线程的多种方法
*/
#include <iostream>
#include <sstream>
#include <functional>
#include <thread>
#include <future>
#include <unordered_map>
#include <vector>
#include <algorithm>
using namespace std;
template<typename T> T stringcat(T &x,T &y)
{
std::cout<<"stringcat start...."<<endl;
x += x;
y += y;
//睡眠指定毫秒数
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
std::cout<<"stringcat end...."<<endl;
return x + y;
}
template<typename T> class CTheadOperator
{
public:
T operator()(T &x,T &y);
//异步发起函数调用
void async();
//采有创建线程发起异步调用
void createthread();
void createthreadA();
//采有创建线程发起异步调用,并获取到线程调用结果
void getthreadresult();
//采有创建线程发起异步调用,并获取到线程调用结果
void getthreadresult_lamba();
};
template<typename T> void CTheadOperator<T>::createthread()
{
std::string x = "x",y = "y";
auto b = std::bind(stringcat<std::string>,x,y);
std::cout<<"createthread wait str