需要引入thread库
创建线程:
thread thr = thread(fun_name, argvs());//参数列表
当线程被创建以后,就会自动开始执行线程函数fun_name,函数的参数中如果有引用,需要用ref()函数,不能用&符号
创建线程数组:
thread* th = new thread[thr_num]; //新建一个线程数组
for(int i=0;i<thr_num;i++){
//对每个线程进行初始化
th[i] = thread(函数名称, 参数列表);
}
//线程完成时,需要等待线程结束,可使用join或者detach
for (int i = 0; i < actThr_num; i++)
th[i].join();//等待子线程结束
当thread::join()函数被调用后,调用它的线程会被block,直到线程的执行被完成。基本上,这是一种可以用来知道一个线程已结束的机制。当thread::join()返回时,OS的执行的线程已经完成,C++线程对象可以被销毁。
当thread::detach()函数被调用后,执行的线程从线程对象中被分离,已不再被一个线程对象所表达–这是两个独立的事情。C++线程对象可以被销毁,同时OS执行的线程可以继续。如果程序想要知道执行的线程何时结束,就需要一些其它的机制。join()函数在那个thread对象上不能再被调用,因为它已经不再和一个执行的线程相关联。