C/C++实战028:多线程thread使用入门

双11狂欢节 , 半价促销![左上]点击获取!
所有专栏5折哦 , 需要的朋友可以下手啦!
什么是进程(Process)进程是指计算机中正在运行的程序 , 是系统进行资源分配和调度的基本单位 。 当一个程序被加载到内存运行时就会生成一个进程 , 操作系统在调度执行程序过程中会分配和管理资源 。 每个程序运行都会有一个独立的进程 , 而且进程之间是相互独立存在的 。
C/C++实战028:多线程thread使用入门文章插图
什么是线程(thread)线程是进程中的一个执行单元 , 负责当前进程中程序的执行 。 一个程序至少有一个进程 , 一个进程中至少有一个线程(主线程) , 也可以有多个线程 。 线程可以用程序代码来控制 , 具备独立的内存地址 。 线程和进程相互依赖 , 进程离不开线程 , 线程也无法脱离进程 。
C/C++实战028:多线程thread使用入门文章插图
什么是多线程顾名思义就是多个线程同时运行 , 当程序出现多个任务需要执行时单线程只能依次去执行 , 只有当一个任务执行结束后下一个任务才会开始执行(概念相当于:同步/串行) 。 而多线程则可以多个任务可以同时执行(概念相当于:异步/并行) , 多线程方式可以有效的挖掘CPU的使用率来提升程序的执行效率(当然多线程并不能提高程序的运行速度) 。
C/C++实战028:多线程thread使用入门文章插图
thread类这是C++ 11新标准中引入的标准线程库thread(头文件) , 该头文件主要声明了std::thread线程类 。 该类对线程进行了封装 , 定义了一些表示线程的类和可以使用的方法 。 thread类中包含的成员函数有get_id(获取进程ID)、joinable(检查线程是否可被 join)、join(阻塞当前线程 , 需等执行完毕返回)、detach(分离线程 , 单独执行)、native_handle(返回线程句柄)、swap(交换两个线程的底层句柄)、hardware_concurrency(返回当前计算机最大的硬件并发线程数目)等 ,
C/C++实战028:多线程thread使用入门文章插图
thread使用创建线程比较简单 , 在需要使用的文件中先引入头文件和std , 然后通过thread实例化一个线程对象就创建完成了 。 这里我用【华中数控】连接做个简单的例子 , 创建HncApi对象之后我们可以通过HncApi中的方法来连接机床 。 HNC_NetConnect是一个异步的调用过程, 所以不能通过此返回值来确定是否调用成功 。 反复调用HNC_NetInit初始化容易造成系统卡顿等不正常现象 , 此时我们需要启动一个线程不停的调用HNC_NetIsConnect来检查网络连接是否处于连接状态 。
C/C++实战028:多线程thread使用入门文章插图
总结:使用多线程可以充分地利用CPU资源 , 有效地提高程序的工作效率 。 快速地响应用户需求 , 提升用户体验 。 多线程在很多地方都有被用到 , 只是存在的形式有所不同(比如说前端说的同步和异常操作 , 性质跟多线程差不多) 。 以上内容是小编给大家分享的【C/C++实战028:多线程thread使用入门】 。 希望对大家有所帮助 , 如果大家有任何疑问请给我留言 , 小编会及时回复大家的 。 更多C/C++实战技巧可以参考以下专栏:
为了方便学习 , 下面附上本文用到的源码:
【C/C++实战028:多线程thread使用入门】#include using namespace ::std;int CONNECTFlAG = 0; //网络连接状态int THREADFLAG = 1;//线程状态void isConnent() { while (THREADFLAG) {handle->HNC_NetIsConnect() == 0 ? CONNECTFlAG = 1 : CONNECTFlAG = 0;Sleep(1000); }}int main(){HncApi *handle = new HncApi; //创建一个HncApi对象Bit32 ret = handle->HNC_NetInit(computerIp, 9090, "Demo");Bit32 machineNo = handle->HNC_NetConnect(machineIp, 10001);thread conthread(isConnent); //创建后台线程监视网络连接状态THREADFLAG = 0;//关闭线程conthread.join(); //等待线程结束handle->HNC_NetExit();//释放初始化时占用的资源}