- 博客(329)
- 资源 (14)
- 收藏
- 关注
原创 windows USB 了解
这些函数通常按以下顺序使用:调用 SetupDiGetClassDevs 函数创建设备信息集。利用 SetupDiEnumDeviceInterfaces 函数枚举设备信息集中的设备接口。针对每个枚举到的设备接口,调用 SetupDiGetInterfaceDeviceDetail 函数获取详细信息。最后调用 SetupDiDestroyDeviceInfoList 函数销毁设备信息集,释放资源。
2025-03-28 22:07:04
605
原创 vs2022+QT6.7.3打包程序流程
5、管理员方式打开x64 Native Tools Command Prompt for VS 2022,进入test目录,执行:windeployqt6.exe XXX.exe。6、修改程序名称:在"项目->属性->配置属性->常规"选项卡下的“目标文件名”选项,和“项目->属性->配置属性->链接器->常规”选项卡下的“输出文件”选项保持一致即可。4、管理员方式打开Qt 6.7.3 (MSVC 2022 64-bit),进入test目录,执行:windeployqt6.exe XXX.exe。
2025-03-28 21:45:00
264
原创 Linux应用:线程进阶
信号量(Semaphore)是一个整型的计数器,用于控制对共享资源的访问。它通过 PV 操作来实现同步,P 操作将信号量的值减 1,如果值小于 0 则线程阻塞;V 操作将信号量的值加 1,如果有线程在等待则唤醒一个等待的线程。sem_t属于信号量类型,sem是所定义的信号量变量。sem_wait(&sem):这是信号量的 P 操作,其作用是将信号量的值减 1。若信号量的值为 0,线程会被阻塞,直至信号量的值大于 0。printf(“线程进入临界区\n”);:输出线程进入临界区的信息。
2025-03-27 23:19:11
947
原创 Linux应用:线程基础
进程:是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位。每个进程都有自己独立的地址空间、内存、数据栈以及其他用于维护进程运行的资源。线程:是进程中的一个执行单元,是程序执行的最小单位。线程共享所属进程的资源,如地址空间、打开的文件等,但有自己独立的栈空间和程序计数器等。
2025-03-27 22:11:41
822
原创 Linux应用:异步IO、存储映射IO、显存的内存映射
全部刷新实现简单,但效率较低;更新刷新能提高效率,但实现复杂度较高,需要额外的处理来检测变化区域。在实际应用中,要根据具体的需求和场景选择合适的刷新方式。
2025-03-24 23:05:51
1817
原创 Linux应用:select、poll
在阻塞 I/O 模型中,当应用程序调用一个 I/O 操作(如读取文件、从网络套接字接收数据等)时,该应用程序会被阻塞,直到 I/O 操作完成。例如,一个进程调用read系统调用从磁盘读取数据,在数据从磁盘传输到内核缓冲区并复制到用户空间之前,进程会一直处于等待状态,无法执行其他任务。这种模型简单直接,但在等待 I/O 完成的期间,进程资源被浪费,无法进行其他有用的工作。。
2025-03-24 22:57:34
787
原创 Linux应用:Linux的信号
捕获信号并自定义处理:进程可以定义一个信号处理函数,当接收到特定信号时,内核会调用该函数,进程在函数中可以执行自定义的操作。首先需要定义信号处理函数,int fd;int* ptr;if (fd!if (ptr!exit(0);return 0;stdio.h:提供标准输入输出库函数,如 printf 用于输出信息。
2025-03-20 23:32:02
1048
原创 Linux应用:进程间通信
SystemV IPC 是 UNIX System V 操作系统中引入的一组进程间通信机制,包括消息队列、共享内存和信号量。这些机制在 Linux 系统中也得到了广泛应用。。
2025-03-20 22:59:47
911
原创 Linux应用:程序运行
kill命令的这种用法是向指定的进程发送特定信号编号的信号。信号在操作系统中是一种软件中断机制,用于通知进程发生了某种特定事件或要求进程执行特定操作。。
2025-03-17 23:13:07
600
原创 Linux应用:进程详解
程守护进程是一种在后台运行且不受终端控制的进程。它具有以下特点:生存期长:从系统启动开始运行,一直持续到系统关闭,期间持续提供特定服务。脱离控制终端:守护进程启动后,与创建它的终端脱离关系,即使终端关闭,它也能继续运行。运行在特定会话和进程组:通常会创建自己独立的会话和进程组,避免受到其他进程的干扰。。
2025-03-16 20:51:49
587
原创 Linux应用:进程的回收
waitpid函数也是用于等待子进程结束的系统调用,它比wait函数更加灵活。waitpid可以指定等待特定 PID 的子进程,也可以设置非阻塞等待模式或者阻塞模式。通过waitpid,父进程可以更精确地控制对子进程的等待和资源回收操作,例如可以在不阻塞父进程的情况下,定期检查子进程是否结束。pid_t pid;int status;// 创建子进程// 处理 fork 失败的情况return 1;// 子进程代码printf("子进程开始执行,PID: %d\n", getpid());
2025-03-14 21:14:30
606
原创 Linux应用:PCB、fork
子进程是由另一个进程(父进程)通过fork或其他类似机制创建的新进程。子进程继承了父进程的许多属性,如用户 ID、组 ID、环境变量、文件描述符等,但它有自己独立的 PID 和内存空间,与父进程并发执行,在一定程度上可以看作是一个独立的程序在运行。
2025-03-13 21:32:55
866
原创 linux应用:进程前章
操作系统加载程序:当用户在命令行输入程序的可执行文件名或者通过图形界面点击应用程序图标时,操作系统的加载器(loader)开始工作。加载器会在磁盘上找到对应的可执行文件,该文件遵循特定的格式,如 ELF(Executable and Linkable Format,用于 Linux 系统)。加载器将可执行文件中的代码和数据加载到内存中,并设置好运行环境,包括初始化栈(stack)等。。
2025-03-12 22:13:42
877
原创 linux应用:随机数、proc
proc是一个虚拟文件系统,它提供了一种内核与用户空间交互的方式,通过文件和目录的形式展示内核对象的信息,包括进程信息、系统状态、硬件设备信息等。它并不占用实际的磁盘空间,而是在内存中动态生成。当访问/proc下的文件时,内核会实时生成相应的信息并返回给用户空间程序。与时间相关的 proc 文件。
2025-03-12 19:52:52
759
原创 Linux应用:时间API
在 Linux 内核中,jiffies 是一个非常重要的全局变量,它记录了系统启动以来产生的时钟中断次数。每发生一次时钟中断,jiffies 的值就会增加 1。时钟中断是由硬件定时器产生的,其频率在系统编译时就已经确定,通过HZ宏来表示,单位是赫兹(Hz)。例如,如果HZ的值为 1000,那就意味着系统每秒会产生 1000 次时钟中断,jiffies 每秒也会增加 1000。jiffies 的类型通常是unsigned long,这使得它能够表示一个非常大的计数值,即使系统运行很长时间也不会溢出。
2025-03-11 20:58:19
1034
原创 linux应用:静态文件、 inode(i 节点)、vnode、流
inode(index node,索引节点)是 Unix/Linux 文件系统中的一种数据结构,用于存储文件的元数据信息,每个文件和目录在文件系统中都有一个对应的 inode。inode 是文件系统管理文件的核心,它记录了文件的各种属性和数据块的存储位置等信息。
2025-03-10 21:12:01
1150
原创 Linux应用:文件属性
umask 是 Linux 系统中用于控制新创建文件和目录默认权限的掩码。它决定了在创建文件或目录时,从默认权限中去除哪些权限位。umask 的值是一个八进制数,与文件和目录的权限位相对应。umask 的工作机制当用户创建一个文件或目录时,系统会先根据默认的权限模式(文件通常是 666,目录通常是 777),然后与 umask 进行按位取反的 “与” 操作,得到最终的实际权限。例如,umask 的值为 022,对于文件来说:默认权限 666(八进制)转换为二进制是 110 110 110。
2025-03-09 21:27:02
933
原创 linux应用:文件描述符、lseek
fcntl函数是一个功能强大的文件控制函数,它可以对已打开的文件描述符进行各种操作,包括复制文件描述符、改变文件状态标志、设置和获取文件的访问控制权限等。fd:需要操作的文件描述符。cmd:指定要执行的操作命令,常见的命令如下:F_DUPFD:复制文件描述符fd,返回一个新的文件描述符,新描述符是当前进程中未使用的最小整数值。与dup函数类似,但fcntl通过F_DUPFD提供了更多控制选项。close(fd);// 现在fd和new_fd都指向同一个文件close(fd);
2025-03-06 22:07:59
1001
原创 QT:TCP示例
定义的区别内存分配首先声明了一个RecvServer类型的指针server。接着使用new操作符在堆(heap)上分配内存来创建一个RecvServer对象,并将对象的地址赋值给server指针。堆内存的分配较为灵活,适用于需要在程序运行期间动态创建和销毁对象,且对象生命周期可能跨越多个函数调用或作用域的场景。例如,在一个需要长期运行的服务器程序中,服务器对象可能需要在整个程序生命周期内持续存在,此时在堆上分配内存更为合适。直接在栈(stack)上创建一个RecvServer对象。
2025-03-05 22:42:19
544
原创 linux应用:errno、perror、open、fopen
errno 是一个全局变量,定义在 头文件中。当系统调用(如 open、read、write 等)或库函数执行失败时,会将一个错误码赋值给 errno。不同的错误码代表不同的错误类型,通过检查 errno 的值,可以判断具体发生了什么错误。代码中使用 open 函数尝试打开一个不存在的文件。由于文件不存在,open 函数会执行失败并返回 -1。当 open 函数返回 -1 时,通过检查 errno 的值来判断具体的错误类型。ENOENT 是一个预定义的错误码,表示文件或目录不存在。
2025-03-04 23:19:26
694
原创 linux应用:文件IO
文件描述符(File Descriptor)是在 Linux 等操作系统中用于标识已打开文件的整数。它是操作系统内核为了管理文件而分配给每个打开文件的一个唯一标识符静态文件是指内容固定不变的文件,在服务器上以固定的格式存储,每次被请求时,服务器直接将其内容发送给客户端,不经过任何动态处理。动态文件是指内容根据不同的条件和请求而动态生成的文件。服务器在接收到客户端请求时,会根据请求的参数、用户的状态、数据库中的数据等因素,通过执行相应的程序或脚本动态生成文件内容,然后发送给客户端。O_RDONLY。
2025-03-03 19:37:41
535
原创 QT:三连问
信号(Signal):是由对象发出的事件通知。当一个对象的状态发生变化或者某个特定事件发生时,它就会发出一个信号。信号是在类中使用 signals 关键字声明的函数,只声明不实现,例如 void signalName();。信号可以携带参数,以便在信号发出时传递相关信息。槽(Slot):是用于接收信号并执行相应操作的函数。槽函数在类中使用 slots 关键字声明,与普通的 C++ 函数类似,但它可以与信号进行连接。当与槽函数连接的信号被发出时,槽函数就会被自动调用。
2025-03-02 18:31:13
806
原创 QT:Echart-折线图
html 文件的基础上实现鼠标移动图表上的点,可以按照以下步骤添加相应的 JavaScript 代码来实现交互功能。主要思路是通过监听鼠标事件(按下、移动、松开),判断鼠标是否在点的范围内,若在则允许拖动点并更新图表数据。使用 Qt Designer 创建一个主窗口,添加一个 QLineEdit 和一个 QWebEngineView。注意HTML文件当中的echarts.min.js文件路径。在 UI 设计中添加一个 QLabel 控件。
2025-03-01 20:01:30
344
原创 QT:QT场景视图
QGraphicsScene:场景类,作为一个容器,用于管理大量的 QGraphicsItem 对象。它不直接显示图形,而是负责存储和组织这些图形项,提供对图形项的添加、删除、查找等操作,同时处理图形项的碰撞检测、鼠标事件等。QGraphicsView:视图类,它是一个可视化的窗口,用于显示 QGraphicsScene 中的内容。可以对视图进行缩放、平移、旋转等操作,还能处理用户的交互事件,如鼠标点击、滚动等。QGraphicsItem:图形项类,是所有图形元素的基类。
2025-02-27 21:56:56
1757
原创 QT:模型视图代理
在 Qt 中,QAbstractItemModel 是所有模型类的抽象基类,它为数据模型提供了一个通用的接口,使得数据可以被不同的视图(如 QListView、QTableView、QTreeView 等)显示和操作。从 QAbstractItemModel 派生出了许多具体的模型类。
2025-02-27 21:26:09
781
原创 QT:Graphics View的坐标系介绍
在 Qt 的 Graphics View 框架中,存在三种不同的坐标系,分别是 物品坐标系(Item Coordinates)、场景坐标系(Scene Coordinates) 和 视图坐标系(View Coordinates)。这三种坐标系在图形的绘制、定位和交互中起着关键作用,
2025-02-26 23:35:38
763
原创 QT:QPen、QBrush、与图形抗锯齿的关联
QPen 是 Qt 框架中用于定义绘图时使用的画笔属性的类。在使用 QPainter 进行 2D 绘图时,QPen 可以控制线条的外观,比如线条的颜色、宽度、样式(如实线、虚线等)、端点样式(如方形端点、圆形端点等)和连接样式(如斜接、圆角连接等)。
2025-02-26 22:48:16
937
原创 QT:QLinearGradient、QRadialGradient、QConicalGradient
QLinearGradient 是 Qt 框架中用于创建线性渐变的类,它允许在图形绘制中实现颜色沿着一条直线的平滑过渡效果。以下是关于 QLinearGradient 的详细介绍:基本概念:线性渐变是指颜色从一个点(起始点)沿着一条直线逐渐变化到另一个点(结束点),在这个过程中可以设置多个颜色停止点,从而实现多种颜色的渐变过渡。头文件包含:使用 QLinearGradient 时,需要包含相应的头文件。x1、y1 是起始点的坐标,x2、y2 是结束点的坐标。
2025-02-25 21:27:26
809
原创 QT:paintEvent、QPainter、QPaintDevice
在 Qt 编程中,paintEvent 是 QWidget 类中的一个非常重要的虚函数,用于处理绘图事件。当一个 QWidget 或其派生类的实例需要进行重绘操作时,Qt 会自动调用该控件的 paintEvent 函数。
2025-02-24 22:11:26
896
原创 std::thread的同步机制
std::future 是一个模板类,定义在 头文件中。它提供了一种机制,允许一个线程等待另一个线程的异步操作结果。当一个异步操作启动时,会返回一个 std::future 对象,通过该对象可以在需要的时候获取异步操作的返回值。
2025-02-23 23:38:50
1385
原创 C++:std::thread、条件变量与信号量
在多线程编程的世界里,协调不同线程之间的工作是一项极具挑战性的任务。线程可能需要等待特定条件的满足,或者对共享资源的访问进行限制。C++ 标准库为我们提供了强大的工具,如 std::thread 用于创建和管理线程,条件变量用于线程间的同步,信号量则用于控制对资源的访问。本文将通过具体的 C++ 代码示例,详细介绍如何使用这些工具。
2025-02-22 22:45:00
815
原创 C++:pthread线程分离和线程属性
在 pthread 库中,线程有两种状态:可结合(joinable)和分离(detached)。默认情况下,新创建的线程是可结合的。可结合的线程在结束时,需要其他线程调用pthread_join函数来回收其资源,否则会造成资源泄漏。而分离的线程则会在结束时自动释放资源,无需其他线程来回收。线程属性定义了线程的一些特性,如栈大小、调度策略、优先级等。通过设置线程属性,可以根据具体的应用需求来优化线程的行为。在 pthread 库中,使用pthread_attr_t类型来表示线程属性。
2025-02-20 22:15:00
1047
原创 C++:pthread的使用
pthread 是 POSIX 线程(POSIX Threads)的简称,它是 POSIX 标准中定义的线程接口规范。pthread 库提供了一系列函数,用于创建、销毁、同步和管理线程。在类 Unix 系统(如 Linux、macOS)中,pthread 库被广泛使用,是实现多线程编程的重要工具。
2025-02-19 21:19:56
1050
原创 C++:并发编程基础
定义:内核是操作系统的核心部分,它是硬件与其他软件层次之间的桥梁,提供了对硬件资源的直接管理和控制,以及为上层软件提供基本的服务和接口。可以将内核看作是计算机系统的 “大脑”,负责协调和管理系统的各种活动。功能进程管理:内核负责创建、调度和销毁进程,它决定了哪个进程可以在 CPU 上运行,以及运行多长时间,确保各个进程能够公平、高效地使用 CPU 资源。
2025-02-18 22:30:11
918
原创 C++:gtest samples1学习
sample1.ccsample1.hsample1_unittest.cc用于验证给定的布尔表达式是否为 false。如果表达式的值为 false,则测试通过;如果为 true,则测试失败,并输出相应的错误信息,但测试会继续执行后续的断言。EXPECT_TRUE用于验证给定的布尔表达式是否为 true。如果表达式的值为 true,则测试通过;如果为 false,则测试失败,并输出相应的错误信息,但测试会继续执行后续的断言。EXPECT_EQ用于验证两个值是否相等。这里的值可以是基本数据类型(
2025-02-13 22:53:43
386
原创 C++:gtest的使用
Google Test(简称 gtest)是由 Google 开发的一款功能强大、灵活且广泛使用的 C++ 测试框架。它为 C++ 开发者提供了丰富的工具和断言,使得编写和运行单元测试变得更加简单和高效。gtest 具有许多优秀的特性。首先是它的跨平台性,无论是 Windows、Linux 还是 macOS 等主流操作系统,gtest 都能很好地支持,这为不同开发环境的开发者提供了便利。
2025-02-12 00:00:18
1022
wrieshark.zip
2021-03-12
IAR for 430
2020-10-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人