1 创建匿名线程
class CIPCDevice
{
public:
void Login() {};
};
inline void TestCreateThread()
{
CIPCDevice* p = new CIPCDevice();
std::thread instance([&]()
{
std::cout << "Welcome to https://blog.51cto.com/fengyuzaitu/classify" << std::endl;
p->Login() ;
::Sleep(100000);
}
);
instance.detach();
}
detach调用之后,目标线程就成为了守护线程,驻留后台运行,与之关联的std::thread对象失去对目标线程的关联,无法再通过std::thread对象取得该线程的控制权。当线程主函数执行完之后,线程就结束了,运行时库负责清理与该线程相关的资源。
备注:如果不调用detach函数,等TestCreateThread函数执行完成,线程对象instance会进行析构调用清理线程资源,而这个时候线程还没有正常运行完成,导致访问冲突,而造成程序崩溃中断。测试代码
inline void TestCreateThread()
{
CIPCDevice* p = new CIPCDevice();
std::thread instance([&]()
{
std::cout << "Welcome to https://blog.51cto.com/fengyuzaitu/classify" << std::endl;
p->Login() ;
::Sleep(100000);
}
);
}