創建線程
案例1:如何創建線程
#include <thread>
void do_some_work();
std::thread my_thread1(do_some_work);//函數對象會複製到新線程的存儲空間中,函數對象的執行和調用都在線程的內存空間中進行
class background_task
{
public:
void operator()() const
{
do_something();
do_something_else();
}
};
background_task f;
std::thread my_thread2(f);//可調用對象f
std::thread my_thread3((background_task()));//std::thread my_thread(background_task())不可用,使用臨時變量該語句會被編譯器判定爲函數聲明
std::thread my_thread4{background_task()};//新的初始化語法
案列2:線程的加入、分離
#include <iostream>
#include <thread>
void do_some_work()
int main()
{
cout<<"run do_some_work"<<endl;
std::thread my_thread(do_some_work);//創建線程
my_thread.join();//加入線程,主線程會等待子線程結束
//my_thread.detach() 分離線程,主線程不會等待子線程結束
return 0;
}