C++11 |
您所在的位置:网站首页 › 怎样结束一个线程运行 › C++11 |
在本文中,我们将讨论如何在 C++11 中停止或终止线程。 C++11 没有提供停止正在运行的线程的直接方法,这是因为该线程可能有一些资源在退出前释放或关闭,即 如果一个线程获得了一个锁,我们突然杀死了那个线程,那么谁来释放那个锁呢? 如果一个线程打开了一个文件来写入文本,而我们停止了该线程,那么谁会关闭该文件呢? 如果线程已经在堆上分配了内存并且在它可以删除该内存之前,我们会停止该线程。那么谁来防止内存泄漏。因此没有直接关闭线程的函数。但是我们可以通知线程退出,我们可以以这样一种方式实现 out 线程,即在一段时间后或在某些检查点后,它应该检查是否要求我退出。如果是,那么它应该通过释放所有资源优雅地退出。 使用 std::future 停止线程
我们可以将std::future对象传递给线程,当未来的值可用时,线程应该退出。因为,我们只想给线程发信号,而不是在该信号中实际传递任何值,所以我们可以使用 void 类型的未来对象。
让我们在 main 函数中创建一个 void 类型的 promise 对象,即 // 创建一个 std::promise 对象 std::promise < void > exitSignal;
现在,从主函数中的这个承诺中获取关联的未来对象,即 //获取与promise关联的std::future对象 std::future < void > futureObj = exitSignal.get_future () ;
现在在创建线程的主函数中,将未来对象传递给线程函数,即 // 启动线程并通过引用移动 lambda 函数中的未来对象 std::thread th ( &threadFunction, std:: move ( futureObj )) ;
在线程内部,我们正在做一些工作并继续检查线程是否已被请求退出,即未来的值是否可用。 void threadFunction(std::future futureObj) { std::cout |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |