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