#include <iostream>
#include <thread>
void function_1() {
std::this_thread::sleep_for(std::chrono::milliseconds(500));
std::cout << "I'm function_1()" << std::endl;
}
void test_detach() {
std::thread t1(function_1);
t1.detach();
std::cout << "test_detach() finished" << std::endl;
}
void test_join() {
std::thread t1(function_1);
t1.join(); //Block until function exec finished.
std::cout << "test_join() finished" << std::endl;
}
int main() {
test_detach();
//test_join();
//让主线程晚于子线程结束
std::this_thread::sleep_for(std::chrono::milliseconds(1000)); //延时1s
return 0;
}
// 执行结果:
// 使用test_detach时
// test_detach() finished
// I'm function_1()
// 使用 test_join()时
// I'm function_1()
// test_join() finished
当使用detach()时,如果去掉main函数中的1s延时,会发现function_1的信息没有打印,因为主线程执行的太快,整个程序已经结束了,那个后台线程被C++运行时库回收了。