C++11启动线程的方式有哪些
这篇文章主要介绍“C++11启动线程的方式有哪些”,在日常操作中,相信很多人在C++11启动线程的方式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++11启动线程的方式有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
我们拥有10年网页设计和网站建设经验,从网站策划到网站制作,我们的网页设计师为您提供的解决方案。为企业提供网站建设、成都网站建设、微信开发、微信小程序定制开发、成都做手机网站、H5技术、等业务。无论您有什么样的网站设计或者设计方案要求,我们都将富于创造性的提供专业设计服务并满足您的需求。
一、函数指针方式
函数指针方式启动线程是最原始、最基础的方式。定义实现线程的处理函数ThreadFunction,然后启动线程的时候,将函数指针传达给线程类的构造函数。
启动线程之后,打印了如下信息,说明线程启动之后,调用了线程处理函数。
二、函数对象方式
第二种启动线程的方式是采用函数对象的形式,首先创建类ThreadOpeartor,然后该类重载operator()运算符,最后以仿函数的形式作为线程的参数传递给线程来启动。
同样的,运行程序之后,串口上可以查看到如下信息,说明函数对象方式启动线程是生效的。
三、lambda方式
第三种启动线程的方式是lambda函数形式,lambda函数即匿名函数,它作为线程的参数来启动线程。
编译运行程序之后,也可以确认线程启动的时候,调用了lambda函数。
四、类函数指针方式
第四种启动线程的方式是类函数指针形式,先在类成员之中定义类成员函数,然后以函数指针作为参数来启动线程。
从运行结果看,启动的线程成功调用了类的成员函数。
五、std::bind方式
第五种启动线程的方式是stb::bind形式, 首先是类成员函数作为stb::bind的参数, 然后stb::bind再作为线程参数来启动线程。
编译成功之后,运行程序的结果如下,这也说明std::bind方式启动线程是可行的。
六、启动方式优缺点
函数指针启动线程的方式是一种比较老的方式,linux系统中pthread库是支持的,是属于面向过程的思想,如果使用的系统不支持C++11, 那么可以采用这种方式。
函数对象启动线程的方式可以在类内部定义更多的细节,比如定义成员变量,将更多的逻辑处理细节进行封装。
lambda函数启动线程的方式是代码比较简洁,由于函数是内嵌形式,可读性也比较好,它适用于线程处理函数的逻辑不是很复杂的场景。
类函数指针启动线程的方式,线程的处理函数是属于类,所以需要注意其生命周期。
std::bind启动线程的方式,它可以与std::function结合起来,实现函数回调功能。
七、线程应用场景
本节将采用函数对象的形式启动线程,说明如何应用到实际的应用中。
假设有不同的命令,需要在线程中执行,首先实现命令基类
然后创建执行命令类JWorkThread, 并重载operator() 运算符, 并且内部执行命令。
接着现在有一个类JRunCmd继承基类JCommand,则调用方式如下所示
到此,关于“C++11启动线程的方式有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!
当前文章:C++11启动线程的方式有哪些
本文URL:http://scjbc.cn/article/jiicpo.html