成都创新互联网站制作重庆分公司

C++怎么正确使用线程

这篇文章主要介绍“C++怎么正确使用线程”,在日常操作中,相信很多人在C++怎么正确使用线程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++怎么正确使用线程”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

创新互联公司的客户来自各行各业,为了共同目标,我们在工作上密切配合,从创业型小企业到企事业单位,感谢他们对我们的要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。专业领域包括成都网站设计、网站建设、电商网站开发、微信营销、系统平台开发。

CP.26:不要分离线程

Reason(原因)

通常,生命周期超过创建它的线程的需求继承自线程任务,但是通过分离(detach)实现这个想法使得监视和与分离的线程进行通信更加困难。在特殊情况下,很难(虽然不是不可能)确保线程可以像期望的那样中止或继续动作。

Example(示例)

void heartbeat();

void use()
{
   std::thread t(heartbeat);             // don't join; heartbeat is meant to run forever
   t.detach();
   // ...
}

这段代码是线程的合理用法,其中通常会使用detach()。虽然这个做法存在问题。我们如何监视一个分离的线程以便知道它是否处于活动状态?心跳线程可能发生某些问题,对于需要心跳功能的系统来说,丢失心跳是很严重的问题。因此,我们需要和心跳线程通信(例如通过一个信息流或使用condition_variable的通知事件)。

An alternative, and usually superior solution is to control its lifetime by placing it in a scope outside its point of creation (or activation). For example:

另外一个可选的,通常是更高级的做法是将它放到创建它(或者激活它)的作用域之外。例如:

void heartbeat();

gsl::joining_thread t(heartbeat);             // heartbeat is meant to run "forever"

This heartbeat will (barring error, hardware problems, etc.) run for as long as the program does.

心跳线程将会和程序运行同样长的时间(除非发生错误,硬件问题等情况)。

Sometimes, we need to separate the point of creation from the point of ownership:

有时,我们需要将生成视点和所有权视点相分离。

void heartbeat();

unique_ptr tick_tock {nullptr};

void use()
{
   // heartbeat is meant to run as long as tick_tock lives
   tick_tock = make_unique(heartbeat);
   // ...
}
Enforcement(实施建议)

Flag detach().

标记分离(detach)操作。

到此,关于“C++怎么正确使用线程”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


网页名称:C++怎么正确使用线程
当前网址:http://cxhlcq.com/article/jgdidj.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部