c++11多线程

demo1

#include 
#include 
#include 
using namespace std;

void output(int i)
{
   sleep(1);
   cout << std::this_thread::get_id()<< endl;//线程id, 如果在main中,可以用成员函数t.get_id()
}

int main()
{

    for (uint8_t i = 0; i < 10; i++)
    {
        thread t(output, i);//创建线程,这里放到了循环中,所以用join()才会变成11秒,如果先在之前承建了10个线程,执行时间只有2s。
        t.detach();//线程直接放后台执行,主程序继续向下执行
        //t.join();//线程执行完再执行主程序,用这种的话实际上没有并发,程序执行约11秒。输出结果是10个线程id一样,
    }
    sleep(1);//如果不加这句,主线程结束,子线程来不及执行
    return 0;
}

输出结果

140509965727488
140509990905600140509957334784
140509974120192140509940549376
140509982512896
140509948942080
140509932156672


140509923763968
140509915371264

//整个程序执行时间只有1秒

windows 版本的

#include 
#include 
#include //Sleep()延时函数,windows是以秒为单位
using namespace std;

void output(int i)
{
	Sleep(100);//设置成1000ms,发现没有输出,主线程执行已经结束
	cout << std::this_thread::get_id() <<  i<
160367
268726
260003
180320
278885
267321
172324
234569
277202
223208

基础:

1. 线程的构造

template , thread>>>
    explicit thread(_Fn&& _Fx, _Args&&... _Ax)

这是一个模板函数,

你可能感兴趣的:(C++)