0
点赞
收藏
分享

微信扫一扫

std::thread 线程函数使用记录过程

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);
}
);
}


举报

相关推荐

0 条评论