1 join方法
代碼示例:
#include <iostream>
#include <thread>
void HelloWorld()
{
std::cout << "hello world" << std::endl;
}
int main()
{
std::thread helloWorldThread(HelloWorld);
helloWorldThread.join();
getchar();
return 0;
}
在上述代碼中,線程函數HelloWorld將會被子線程helloWorldThread啓動,並運行在該線程中,而join函數會阻塞線程,直到線程函數執行完畢,如果線程函數有返回值,那麼返回值將會被忽略。
2 detach方法
如果我們不想線程被阻塞怎麼辦?使用detach方式,但是風險很高,你可以聯想C++的野指針。
在下列代碼中,線程函數HelloWorld將會被子線程helloWorldThread啓動,並運行在該線程中,detach方法會將線程與線程對象分離,讓子線程作爲後臺線程執行,當前的線程也不會被阻塞。但是,線程detach之後無法與當前線程取得任何聯繫,也就是說detach之後無法使用join等待線程執行完成,因爲線程detach之後何時執行完畢取決於其函數體內的運算邏輯。
代碼示例:
#include <iostream>
#include <thread>
void HelloWorld()
{
std::cout << "hello world" << std::endl;
}
int main()
{
std::thread helloWorldThread(HelloWorld);
helloWorldThread.detach();
// do other things 馬上可以做其他事情,不會被阻塞
getchar();
return 0;
}
如果有興趣,可以訪問我的個站:www.stubbornhuang.com