- 博客(65)
- 收藏
- 关注
原创 基于Linux C语言多线程服务器+Qt客户端+STM32客户端实现的无人超市项目
这个是前段时间做的一个项目,综合性很强,还是值得学习的。技术栈有Linux系统编程(线程编程、进程间通信、网络编程作为socket服务端)、MySQL数据库(服务端和数据库进行交互,存储和读取数据)、Qt上位机开发(作为socket客户端)、STM32使用8266WIFI模块也作为socket客户端。Linux网络编程Qt网络调试助手MySQL数据库开发。其中Qt我写了两个程序都作为socket的客户端(client),其中Qt管理员端主要负责商品和会员信息的注册和数据的修改工作。
2025-03-30 18:37:55
1041
8
原创 Linux安装MySQL数据库并使用C语言进行数据库开发
由于最近在做项目,需要用到数据库,想在Linux服务端使用C语言操作MySQL数据库,于是写一篇博客记录一下。希望大伙点个关注支持一下,不久后就更新项目博客。编译的时候需要指定头文件路径以及链接mysqlclient库。项目中只用到了数据的插入、修改、删除和查询(如果你也是想用C语言对数据库进行简单操作,你可以参考我的代码)。后面我会更新Linux下C语言编写的服务端+Qt管理员端+Qt用户端+STM32用户端实现的无人超市项目。希望大家点个关注支持一下。
2025-03-25 20:31:47
1234
1
原创 Qt项目之网络调试助手(详细源码讲解)
本次项目源码在我资源里免费下载!使用QT封装好的类:QTcpServer和QTcpClient,和Linux网络编程类似,写一个服务端和客户端,程序运行结果如下:(还有一点点小瑕疵,但是主要的功能都实现了,直接调用封装好的函数即可)// 获取文本编辑框的光标并移动到末尾// 设置文本颜色格式// 插入文本并换行(兼容不同平台)// 更新文本编辑框的光标状态// 自动滚动到最新内容。
2025-03-06 21:01:49
1052
2
原创 Qt项目之串口调试助手
Qt项目--记事本。完整源码在我的资源里免费下载!界面如下,模仿安信可的串口调试助手界面,功能所见即所得:话不多说,开始该项目的学习。/*--------自定义的mycombobox.cpp文件里--------*///鼠标按下的事件//发出一个信号/*-------构造函数里-------*/// 刷新可用串口名称的函数(通过自定义ComboBox,检测鼠标点击事件)// 清空串口号下拉框中的所有选项// 获取当前系统中所有可用的串口信息// 遍历所有可用的串口信息。
2025-03-05 00:29:29
873
原创 基于STM32的环境监测系统(自制蓝牙APP)
主控为stm32f103c8t6。使用DHT11温湿度传感器和MQ-2烟雾传感器,读取并实时刷新在0.96寸OLED屏幕上,同时通过蓝牙模块HC-05使用串口通信将数据上传到上位机(自制蓝牙APP)。可手动控制蜂鸣器以及电机作为报警器和风扇;在自动预警模式下,监测到温度高出设定的阈值后打开风扇降温;当监测到烟雾浓度高出设定阈值后将关闭风扇防止火情蔓延,并开启蜂鸣器报警,上位机同步更新报警状态。
2025-03-04 21:11:24
742
2
原创 基于STM32HAL库的万年历系统
本篇博客来做一个简易的万年历系统,需要用到旋转编码器和0.96寸OLED屏幕,以及STM32内部的RTC时钟;程序应当分为两种主要模式:普通模式与设置模式;普通模式下程序从RTC中获取当前的unix时间戳,然后将其按照一定的格式显示在OLED屏幕上;按下旋转编码器,可以进入设置模式,会有光标在数据下闪烁,顺时针旋转旋钮数据增加,逆时针减少;再次按下旋钮切换到下一个参数的修改,依次修改年月日时分秒后再次按下旋钮就回到普通模式,将设置好的时间转换为戳写入到RTC中,同时自动设置好星期,并显示在OLED屏幕上。
2025-02-09 19:25:42
1045
3
原创 HAL库外设宝典:基于CubeMX的STM32开发手册(持续更新)
这是一份专注于STM32 HAL库的实战学习笔记,你将通过它掌握两大核心技能:手把手教你通过CubeMX配置常用外设,摆脱对标准库的依赖;像查字典一样随时检索HAL库函数用法,快速解决开发中的配置难题。这里都会提供开箱即用的代码模板和直击痛点的配置要点。话不多说,让我们直接开启HAL库的学习之旅,本教程会持续更新,希望大家关注支持一下。
2025-02-07 00:03:58
1830
10
原创 Qt项目之我的记事本(手把手教学,面向Qt零基础教学,包含源码以及详细注释)
本课程会从0开始,手把手带你熟悉Qt的开发流程,每讲一个Qt的类,我都会先写一些示例代码,再根据最终需要的效果给出最终代码,跟着我一步一步做,你也可以做出属于你自己的记事本,源码可以从我的资源直接下载,希望大家关注支持一下,后续还会同步更新Qt项目的学习笔记。众所周知Qt是一个基于C++的框架,主要用来开发带窗口的应用程序。我们使用的基于窗口的应用程序都是基于事件,其目的主要是用来实现回调(因为只有这样程序的效率才是最高的)。
2025-01-26 01:47:26
780
9
原创 C++基础入门(二)
类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。构造,那构造的是什么呢?构造成员变量的初始化值,内存空间等。构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。// 使用std命名空间public:// 不需要使用std::stringint year;// 无参构造函数Car() {brand = "未知";year = 0;cout
2025-01-16 17:00:09
1014
7
原创 C++基础入门(一)
本系列博客是给后续 QT 的学习打下基础,掌握了 C 语言再来看 C++基础的系列文章,才会比较好理解。假设我们要创建一个命名空间来包含与圆形相关的功能。cir.h在这个头文件中,我们定义了一个名为Cir的命名空间,其中包含了计算圆的面积和周长的函数,以及圆周率常量PI。int main()printf("半径为%f的圆,周长为%f,面积为%f\n",return 0;可以看到我这里使用了 C 语言的写法,说明某些情况下,C 语言和 C++ 是可以混着写的。
2025-01-12 16:52:59
906
6
原创 Linux应用项目之量产工具(六)——业务系统
前面我们完成了量产工具的各个子系统:显示、输入、文字、UI、页面。这样的架构很容易扩展,可以在这上面实现各种业务:比如可以做收银机、自动售卖机、智能秤、取号机;再加上摄像头显示,就可以做出可视对讲、视频监控、人脸红外测温等等。前面初始化各个子系统都与我们的业务没有关系,最主要的是调用主页面里的 Run 函数,所以Run 函数在做什么事情就和业务严重相关,我们要做的就是编写主页面的 Run 函数。至此,量产工具这个项目我们就完成了,这是韦东山老师的一个项目。
2024-12-01 03:17:13
695
3
原创 Linux应用项目之量产工具(五)——页面系统
前面我们完成了量产工具的显示、输入、文字、UI系统;这节我们来实现页面系统的代码。代码比较简单。我们在主界面点击一个按钮后,可以跳转到另一个界面执行其他操作,我们怎么去统一的表示这些界面?我们需要抽象出一个结构体。页面管理器用来管理页面:只需要实现 2 个函数:1.PageRegister:把多个页面注册进链表2.Page(name):取出某个界面,得到它的句柄。
2024-11-21 11:12:41
726
原创 Linux应用项目之量产工具(四)——UI系统
所谓 UI ,就是 User Interface(用户界面),有图像界面(GUI)等;我们的UI系统,就是构造各类GUI元素,比如按钮(目前只实现按钮)。怎么描述一个按钮呢?它的位置、大小怎么表示?怎么绘制它?用户点击它之后,如何处理?点击按钮后怎么处理,是业务系统的事情(顶层APP),所以应该提供一个 InitButton 函数,让用户可以提供 OnPressed 等底层函数,上层代码通过下面 3 个函数使用按钮。至此UI系统就完成了。
2024-11-20 14:24:48
1035
4
原创 Linux应用项目之量产工具(三)——文字系统
前面我们完成了量产工具的显示系统和输入系统,这节我们来实现文字系统,套路和前两节类似,先抽象出数据结构然后再对代码进行封装。我们要抽象出一个结构体 FontBitMap ,能描述一个“字符”:位置、大小、位图;我们还要抽象出一个结构体 FontOpr ,能描述字体的操作,比如Freetype的操作、固定点阵字体的操作。底层代码需要实现这三个函数,后面也会有管理层,底层需要把自己注册到管理链表里,上层代码就可以直接调用底层代码而无需关心细节。这就是面向对象的编程思想。
2024-11-15 20:11:15
729
4
原创 Linux应用项目之量产工具(二)——输入系统
前面我们完成了量产工具显示系统部分,见本篇实现输入系统。我们这个项目支持不同的输入设备,比如触摸屏和网络输入,这些输入设备都会向上层提供数据,那么这些数据的结构要统一;另外,对于不同的输入设备,我们也应该抽象出一个统一的结构体来表示。我们想支持同时从多个输入设备里面得到数据,就需要提供一个输入管理。需要为每一个输入设备创建一个线程,就像单片机引入操作系统FreeRTOS一样,要用到线程编程。相关知识见:Linux线程编程。不能使用单一的变量来保存数据,而是使用一个数组来保存数据,使用“环形缓冲区”。
2024-11-14 20:25:04
768
原创 Linux应用项目之量产工具(一)——显示系统
把这套软件烧写在 SD 卡上,插到 IMX6ULL 板子里并启动,它就会自动测试各个模块、烧写 EMMC 系统。工人只要按照说明接入几个模块,就可以完成整个测试、烧写过程。测试结果一目了然:等 LCD 上所有模块的图标都变绿时,就表示测试通过。对这个项目,我们要拆分出多个子系统,并且这些子系统与业务无关,以后还可以应用在其他项目上;我们编写各个子系统的代码时,要抽象出它的对外接口,增加它的扩展性,减少和其他模块的耦合性。
2024-11-10 20:51:10
896
4
原创 Linux网络编程
此函数用于创建一个套接字。domain是网络程序所在的主机采用的通讯协族(AF_UNIX 和 AF_INET 等)。◼ AF_UNIX 只能够用于单一的 Unix 系统进程间通信,而 AF_INET 是针对 Internet 的,因而可以允许远程通信使用。type是网络程序所采用的通讯协议(SOCK_STREAM,SOCK_DGRAM 等)。◼ SOCK_STREAM 表明用的是 TCP 协议,这样会提供按顺序的,可靠,双向,面向连接的比特流。
2024-11-09 23:19:45
700
2
原创 输入系统应用编程(二)—— 电阻屏和电容屏、tslib
无论是调用 ts_read 还是 ts_read_mt,都是通过 tsdev.list 中的模块来处理数据的。这些模块是递归调用的,比如linear模块的read函数如图:linear 模块的 read_raw 函数如图:因为是递归调用,所有最先使用 input 模块读取设备节点得到原始数据,再依次经过 pthres 模块、dejitter 模块、linear 模块处理后,才返回最终数据。
2024-11-08 21:15:14
897
2
原创 输入系统应用编程
先来了解什么是输入设备?常见的输入设备有键盘、鼠标、遥控杆、书写板、触摸屏等等,用户通过这些输入设备与 Linux 系统进行数据交换。什么是输入系统?输入设备种类繁多,能否统一它们的接口?既在驱动层面统一,也在应用程序层面统一?可以的。Linux 系统为了统一管理这些输入设备,实现了一套能兼容所有输入设备的框架:输入系统。驱动开发人员基于这套框架开发出程序,应用开发人员就可以使用统一的 API 去使用设备。作为应用开发人员,可以只基于 API 使用输入子系统。
2024-11-08 18:59:11
1088
原创 IAP程序升级(源码+注释讲解)
IAP 是“In Application Programming”的简写,就是用户程序运行时对 Flash 的某些区域进行烧写,可以写入新版本的软件、用户数据等。IAP 主要包括 BootLoader 和应用程序两部分:在升级时运行的是 Bootloader,它接收新版本的应用程序,烧写在 Flash 上。要实现 OTA(就是通过网络升级软件),需要使用 IAP 技术。要使用 IAP,需要引入Bootloader。上电后,先运行的程序被称为 BootLoader。
2024-10-29 20:56:16
970
6
原创 低成本Modbus传感器的实现(传感器设计+上位机访问多个传感器+源码讲解)
看这篇博客之前,可以先去看看我前几个博客,了解相关知识点:1.UART开发基础2.USB设备编程(一)3.USB设备编程(二)4.Modbus通讯协议5.libmodbus编程应用。本文最终效果是:基于Modbus协议,借助 Modbus Poll(主站设备)软件实现上位机访问多个传感器。主要学习点表的设计;上位机、主控和传感器模块通过Modbus协议进行通信;传感器和主控代码编写;希望本篇博客能为你提供 Modbus 协议相关项目的设计思路。
2024-10-24 13:39:34
1037
2
原创 libmodbus编程应用(超详细源码讲解+移植到stm32)
之前介绍了Modbus协议,广泛应用于工业控制领域,协议内部有很多细节;比如报文的预处理、解析等等,所以我们需要移植别人的库,理解核心代码的主要逻辑,修改底层和硬件相关的代码就可以了,这就需要介绍libmodbus开发库。至此对于modbus协议和libmodbus库的原理讲解和移植就完成了,可以看到能讲的我就尽量讲了,代码的注释写的很详细,光是代码注释我就写了很久,还有哪里有疑问的欢迎大家评论留言,我能解决的都尽力给大家解答。
2024-10-13 00:02:42
3474
17
原创 Modbus通讯协议
Modbus 协议是一种已广泛应用于当今工业控制领域的通用通讯协议。通过此协议,控制器相互之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信。Modbus 协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为 Modbus Master,从设备方使用的协议称为 Modbus Slave。典型的主设备包括工控机和工业控制器等;典型的从设备如 PLC 可编程控制器等。有了它,不同厂商生产的控制设备就可以连接成工业网络,进行集中监控。
2024-10-03 01:46:28
1613
原创 USB设备编程(二)
对于硬件本身,它存储有这个设备的信息,这些信息我们称之为描述符:简单理解成描述这个设备的、具有固定格式的数据。USBX 分为三层。① 控制器层:最底层,USB 设备控制器的驱动程序,通常是 HAL 库② stack layer:实现 USB 设备的基本操作,比如描述符的操作、使用 endpoint 进行数据传输③ Class layer:实现各类 USB 设备的操作,比如 HID 设备、音频设备、虚拟串口,给 APP提供接口。使用 FreeRTOS 改造虚拟串口源码实现与PC互相发送接收数据。
2024-09-28 17:43:45
1409
原创 USB设备编程(一)
USB 本身是一个很庞大、复杂的体系。本文的目的在于:能理解 USB 的一些概念,能使用 USB 传输数据。由于知识点较多,所以分成两个博客讲,本文讲原理,后面会教大家移植USBX并改造成虚拟串口来使用。在学习之前,先记住几个术语,这在后面的代码会经常看到①HCD主机控制器驱动程序②DCD设备控制器驱动程序③PCD底层USB外设控制驱动程序④CDC通信设备类。使用"usbprotocolsuite"打开这些文件,体验 USB 数据传输.后面会讲USB描述符等相关知识,这是Host能识别不同USB硬件的核心。
2024-09-27 19:38:31
1140
2
原创 UART开发基础
本文介绍串口常用的三种编程方式、效率最高的编程方法,并将RTOS和串口的操作结合起来,同时锻炼面向对象的编程方式;在学习的时候,我见到了之前从未见过的函数封装方式,我相信这对我以后的工作有很大的帮助。IDLE,空闲的定义是:总线上在一个字节的时间内没有再接收到数据。回调函数是在中断里被调用的,是在中断退出前被调用的,后续改造回调函数的时候,用到的队列和信号量操作,如果是在中断里,需要加上FromISR后缀,否则会导致代码崩溃!!!把 UART 的操作封装为结构体。
2024-09-25 23:25:11
1280
1
原创 使用freetype显示文字
Freetype 是开源的字体引擎库,它提供统一的接口来访问多种字体格式文件,从而实现矢量字体显示。我们只需要移植这个字体引擎调用对应的 API 接口提供字体文件,就可以让 freetype 库帮我们取出关键点、实现闭合曲线,填充颜色,达到显示矢量字体的目的。关键点 (glyph) 存在字体文件中 ,Windows使用的字体文件在目录下,扩展名为 TTF 的都是矢量字库,本次使用实验使用的是新宋字体simsun.ttc。给定一个字符,怎么在字体文件中找到它的关键点?
2024-09-19 18:29:11
1108
2
原创 ASCII字符和中文字符的显示
板子为韦东山老师的imx6ull板,要在LCD上实现字符的显示,要先实现我之前的博客Framebuffer应用编程里的描点函数,描点函数是屏幕显示的基础,实现了该函数才能进行本篇博客的操作,本文重点讲解字符的显示原理,实际场景中会调用函数就行了。要在 LCD 中显示一个 ASCII 字符,即英文字母这些字符,首先是要找到字符对应的点阵。在 Linux 内核源码中有这个文件:lib\fonts\font_8x16.c,里面以数组形式保存各个字符的点阵。编译时需要指定-fexec-charset=GB2312
2024-09-16 19:55:09
1263
原创 字符的编码方式(ASCII,ANSI,UNICODE)
对于同一个 TXT 文件中的内容,你在 Notepad 上选择不同字体时,字符显示的形状不一样。所以 TXT 文件中保存的是字符的核心:它的编码值。而 Notepad 上显示时,这些字符对应什么形状由字符文件决定。字体和编码值是两个不一样的东西,比如 A 的编码值是 0x41,但是在屏幕上显示出来时可以使用不同的形状。什么叫编码?就是一个字符用什么数字来表示。比如字符 A我们使用0x41来表示它。使用 UTF8 编码时,即使 TXT 文件中丢失了某些数据,也只会影响到当前字符的显示,后面的字符不受影响。
2024-09-16 03:05:09
1202
原创 Framebuffer应用编程
在 Linux 系统中通过 Framebuffer 驱动程序来控制 LCD。Frame 是帧的意思,buffer 是缓冲的意思,这意味着 Framebuffer 就是一块内存,里面保存着一帧图像。Framebuffer 中保存着一帧图像的每一个像素的颜色值。Framebuffer的大小为:屏幕分辨率x每一个像素所占的字节数。mmap 函数的功能是将文件或其他对象映射到进程的内存地址空间。这使得程序可以通过内存操作直接访问文件内容,而无需使用传统的文件读写函数。
2024-09-15 23:05:36
1048
原创 基于Linux文件编程实现处理Excel表格的数据(含源码及注释)
因为是一行一行的处理数据,有些小伙伴可能会疑惑,数据为什么不会被覆盖,为什么不会得到同样的数据?我们要知道read函数的原理,你读一个字符,文件的光标就会移动一个位置,你下次再打开这个文件,他的光标位置是不变的,除非你用lseek函数来改变光标的位置,所以我们每读一行,再加上结束符'\0'就相当于一个字符串,然后立马处理数据并且写入结果文件;下次再去读数据文件,是从上一次读的位置的下一个开始读,所以才能得到一行一行的数据。什么时候读完?
2024-09-11 21:04:17
1822
2
原创 freeRTOS软件定时器(software timer)
软件定时器就是"闹钟",你可以设置闹钟,在 30 分钟后让你起床工作每隔 1 小时让你例行检查机器运行情况软件定时器也可以完成两类事情:在"未来"某个时间点,运行函数周期性地运行函数我们在手机上添加闹钟时,需要指定时间、指定类型(一次性的,还是周期性的)、指定做什么事;还有一些过时的、不再使用的闹钟。如下图所示:使用定时器跟使用手机闹钟是类似的:指定时间:启动定时器和运行回调函数,两者的间隔被称为定时器的周期 (period)。推荐看韦东山老师的课程。
2024-09-11 14:07:55
1054
原创 基于Linux系统和ncurses库的贪吃蛇小游戏(含源码及注释)
ncurses库是什么我并没有深入了解,本文的重点也不是ncurses的使用,至于为什么要使用ncurses库,我们先来看一个问题:我们要通过方向键来控制蛇的走向,用c的库函数scanf和getchar都需要我们输入字符后再按回车,这显然不合理,而ncurses库就能解决这些问题,我们不需要知道他是怎么实现的,我们只需要会用就行了,因为这节主要是巩固链表的知识。最后有源码展示。最终效果:蛇活动的范围为 20x20 ,地图的左右边界用 "|" 符号表示,上下边界用 "--" ,蛇身用 "[]"表示,食物用##
2024-08-26 15:11:15
1191
2
原创 链表(静态/动态创建,遍历,计数,查找,在节点的前/后方插入新节点,头插法,尾插法)
链表本质是一个结构体,结构体里不仅包含不同类型的数据,最重要的是定义了一个指向相同结构体类型的指针(必须是相同类型的结构体),通过这个指针我们就可以将一个又一个的结构体链接(指针存放下一个结构体的地址)起来,每一个结构体就是链表的其中一个节点。我们使用链表的时候可以和数组类比,但两者还是有区别,数组是内存中连续的空间;而链表不一定在内存中连续。使用malloc函数来为每一个新节点分配内存,如果输入的节点id为0代表结束创建,free函数释放最后建立的节点,并返回head头节点的地址。贪吃蛇游戏下篇博客更新。
2024-08-25 03:49:49
1236
原创 freeRTOS任务通知(Task Notifications)
所谓"任务通知",你可以反过来读"通知任务"。我们使用队列、信号量、事件组等等方法时,并不知道对方是谁。使用任务通知时,可以明确指定:通知哪个任务。使用队列、信号量、事件组时,我们都要事先创建对应的结构体,双方通过中间的结构体通信:效率更高:使用任务通知来发送事件、数据给某个任务时,效率更高。比队列、信号量、事件组 都有大的优势。更节省内存:使用其他方法时都要先创建对应的结构体,使用任务通知时无需额外创建结构体。
2024-08-13 16:59:17
1119
原创 freeRTOS事件组(event group)
学校组织秋游,组长在等待:张三:我到了李四:我到了王五:我到了组长说:好,大家都到齐了,出发!张三、李四、王五谁先写好就交谁的。在这个日常生活场景中:出发:要等待这3个人都到齐,他们是"与"的关系交报告:只需等待这3人中的任何一个,他们是"或"的关系在FreeRTOS中,可以使用事件组(event group)来解决这些问题。事件组可以简单地认为就是一个整数:事件组的每一位表示一个事件。
2024-08-13 14:44:49
984
原创 freeRTOS互斥量(mutex)
可以看到,使用信号量确实也可以实现互斥访问,但是不完美。使用互斥量可以解决这个问题,互斥量的名字取得很好:量:值为0、1互斥:用来实现互斥访问它的核心在于:谁上锁,就只能由谁开锁。即使任务A获得了互斥锁,任务B竟然也可以释放互斥锁。谁上锁、谁释放:只是约定。互斥锁解决的核心问题其实是优先级反转和优先级继承。互斥量其实就是一种特殊的二进制信号量,只不过它能解决优先级反转和实现优先级继承。二、互斥量函数。
2024-08-12 00:22:54
1896
原创 FreeRTOS信号量(semaphore)
前面介绍的队列(queue)可以用于传输数据:在任务之间、任务和中断之间。有时候我们只需要传递状态,并不需要传递具体的信息,比如:我的事做完了,通知一下你卖包子了、卖包子了,做好了1个包子!做好了2个包子!做好了3个包子!这个停车位我占了,你们只能等着在这种情况下我们可以使用信号量(semaphore),它更节省内存。信号量(Semaphore),是在多任务环境下使用的一种机制,是可以用来保证两个或多个关键代 码段不被并发调用。信号量这个名字,我们可以把它拆分来看,
2024-08-10 19:23:36
877
原创 FreeRTOS队列(queue)
队列又称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任务间、中断和任 务间传递信息。为什么不使用全局变量?如果使用全局变量,兔子(任务1)修改了变量 a ,等待树獭(任务3)处理,但树獭处理速度很 慢,在处理数据的过程中,狐狸(任务2)有可能又修改了变量 a ,导致树獭有可能得到的不是正确的数据。在这种情况下,就可以使用队列。兔子和狐狸产生的数据放在流水线上,树獭可以慢慢一个个依次处理。关于队列的几个名词::队列中的每一个数据;:队列能够存储队列项目的最大数量;
2024-08-09 16:01:07
2266
原创 Linux线程编程(创建&退出&等待&互斥锁&条件变量)
典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程各自处理独立的任务。所谓线程,就是操作系统所能调度的最小单位。普通的进程,只有一个线程在执行对应的逻辑。我们可以通过多线程编程,使一个进程可以去执行多个不同的任务。相比多进程编程而言,线程享有共享资源,即在进程中出现的全局变量, 每个线程都可以去访问它,与进程共享“4G”内存空间,使得系统资源消耗减少。
2024-07-28 18:19:02
669
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人