C++11

您所在的位置:网站首页 怎样结束一个线程运行 C++11

C++11

2024-05-11 06:00| 来源: 网络整理| 查看: 265

在本文中,我们将讨论如何在 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