基于C++11,介绍五种启动线程的方式需要用多线程的方式处理,这里就涉及到了线程的启动方式。本文将首先讲解五种启动线程的方式,然后分析五种启动方式的优缺点,最后用一个例子来说明如何将线程应用到实际场景中,总结五种启动线程的特点。1.函数指针方式函数指针方式是最原始、最基本的线程启动方式。定义实现线程的处理函数ThreadFunction,然后在启动线程时将函数指针传递给线程类的构造函数。启动线程后,打印如下信息,说明线程启动后,调用了线程处理函数。2.函数对象方法第二种启动线程的方式是函数对象的形式。首先创建一个ThreadOpeartor类,然后在这个类中重载operator()运算符,最后以functor的形式作为线程参数传递给线程启动。同样,运行程序后,在串口上可以看到如下信息,说明启动线程的函数对象方法有效。3.lambda方法第三种启动线程的方法是lambda函数形式。lambda函数是一个匿名函数,作为线程的参数来启动线程。编译运行程序后,也可以确认线程启动时调用了lambda函数。4.类函数指针方式第四种启动线程的方式是类函数指针形式。首先在类成员之间定义类成员函数,然后以函数指针为参数启动线程。从运行结果来看,启动的线程已经成功调用了类的成员函数。5.std::bind方法启动线程的第五种方法是stb::bind形式。首先将类成员函数作为stb::bind的参数,然后将stb::bind作为线程参数启动线程。编译成功后程序运行结果如下,也说明std::bind方式启动线程是可行的。6.启动方式的优缺点用函数指针启动线程的方式是老办法了。Linux系统中的pthread库是支持的,属于面向进程的思想。如果使用的系统不支持C++11,那么可以使用这种方式。函数对象启动线程的方式可以在类内部定义更多的细节,比如定义成员变量,封装更多的逻辑处理细节。lambda函数启动线程的方式,代码比较简洁。由于功能是嵌入式的,所以可读性比较好。适用于线程处理函数逻辑不是很复杂的场景。类函数指针启动线程的方式,线程的处理函数属于类,所以需要关注它的生命周期。std::bind启动线程的方式,可以结合std::function实现函数回调函数。7.线程应用场景本节将以函数对象的形式启动线程,讲解如何将其应用到实际应用中。假设线程中有不同的命令需要执行,首先实现命令基类然后创建执行命令类JWorkThread,并重载operator()运算符,在内部执行命令。那么现在有一个继承基类JCommand的类JRunCmd,调用方法如下。8.小结本文主要讲解了五种启动线程的方式,并说明了它们的特点。最后给出一个线程应用的场景。但是在实际使用中,需要结合具体场景使用相应的线程启动方式。函数指针方法:定义普通函数函数对象方法:重载operator()运算符Lambda函数方法:匿名函数类函数指针方法:对象函数指针std::bind方法:其实也是一个对象函数指针
