avatar
文章
11
标签
8
分类
4

D-Space

D-Space

守护进程详解:理论与实践
发表于2025-03-22|LinuxC++
什么是守护进程?在 Unix/Linux 系统中,**守护进程(Daemon Process)**是一种长期运行的后台进程,通常不受终端会话控制,适用于服务类任务,如 Web 服务器、数据库管理系统等。 在《Unix 环境高级编程》中,守护进程的特点主要包括: 无控制终端:独立于用户的登录会话。 后台运行:通常使用 fork() 使其脱离控制终端。 会话管理:使用 setsid() 创建新的会话并成为会话首进程。 工作目录:通常切换到 / 避免阻止文件系统卸载。 文件权限:调整 umask(0) 以确保文件权限可控。 日志管理:使用 syslog 记录日志。 守护进程的创建步骤1. 创建子进程并退出父进程pid_t pid = fork(); if (pid < 0) { exit(EXIT_FAILURE); } else if (pid > 0) { exit(EXIT_SUCCESS); // 让父进程退出 } 2. 创建新会话,使进程脱离控制终端if (setsid() < 0) { ...
FFPlay项目VideoState详细解释
发表于2025-03-22
VideoState 结构体是 FFplay(FFmpeg 自带的播放器示例)中的核心数据结构之一,它负责维护播放器的整体状态,包括音视频解码、同步、渲染等功能。下面是对 VideoState 结构体中每个成员变量的详细解释: 线程控制与基本状态 SDL_Thread *read_tid; 读取线程(demux 线程)的指针,用于读取和解析输入媒体文件的数据。 const AVInputFormat *iformat; 指向输入格式的指针,例如 MP4、MKV、AVI 等。 int abort_request; 标志位,指示是否请求终止播放(例如用户主动退出)。 int force_refresh; 标志位,指示是否强制刷新视频画面。 int paused; 当前是否处于暂停状态(1:暂停,0:播放)。 int last_paused; 记录上一次暂停状态,防止状态变化时出现不同步问题。 int queue_attachments_req; 标志位,表示是否需要处理附件(如字幕、封面等)。 int seek_r ...
分享 Shadertoy:探索 GPU 着色器编程的无限可能
发表于2025-03-22|WebGLGLSL
什么是 Shadertoy?Shadertoy 是一个基于 WebGL 的在线着色器编程平台,允许开发者使用 GLSL 直接在浏览器中编写和运行 GPU 着色器。它由 Inigo Quilez 创建,广泛用于学习、实验和分享实时渲染技术。 Shadertoy 适用于: 实时渲染:动画、特效、视觉艺术。 计算着色器:图像处理、光线追踪、模拟等。 着色器学习:练习 GLSL 语法,理解 GPU 并行计算。 Shadertoy 着色器结构在 Shadertoy 中,典型的片段着色器(Fragment Shader)代码如下: void mainImage( out vec4 fragColor, in vec2 fragCoord ) { vec2 uv = fragCoord / iResolution.xy; fragColor = vec4(uv, 0.5 + 0.5 * sin(iGlobalTime), 1.0); } 关键变量解析: iResolution:画布的分辨率(像素)。 iGlobalTime:从着色器启动以来的时间(秒)。 f ...
系统内存寻址
发表于2024-10-20
1、区分三种不同的地址:a、逻辑地址,操作系统将程序分段,逻辑地址包含一个段和一个偏移量,通过段和偏移量进行寻址b、线性地址,也称虚拟地址,32位无符号整数,可表达4GB地址,地址范围从0x00000000~0xffffffffc、物理地址,用于内存芯片级的内存寻址,物理地址通常是32位或者36位的 2、内存控制单元:简称MMU,通过一种称为分段单元的硬件电路将逻辑地址转换为线性地址,接着,成为分页单元的硬件电路将线性地址转换为物理地址 3、内存仲裁器:多处理器中,所有CPU共享同一个内存,意味内存将存在来自CPU的并发访问,从而产生了一种称之为内存仲裁器的硬件电路插在总线和每个RAM芯片之间,作用是当某个RAM芯片空闲了,就准许一个CPU去访问,类似代码中的锁。仲裁器由硬件电路管理,对于编程来说是隐藏的。 4、Intel的分段:a、实模式,存在的主要原因是要维持处理器与早期模型兼容,让操作系统自举b、段选择子,一个16位长的字段c、段寄存器,为了方便找到段选择子,处理器提供段寄存器存储段选择符,其中有CS、SS、DS、ES、FS、GS,这些段寄存器可以用于不同的目的,方法是先保存到内 ...
掩码设计原则
发表于2024-02-06
1、基础掩码只能占一位 2、可以加任何偏移,但是运算时需要将偏移减去,不然会影响运算结果 3、位运算 & 用来区分该掩码是否属于某个基类掩码,| 运算则是定义某个组合掩码
git SSL错误解决方法
发表于2024-02-06
打开Git Bash运行如下命令 export GIT_SSL_NO_VERIFY=true git config –global http.sslVerify “false” 在windows的命令行中,进入到git命令所在的磁盘位置,执行下面的git命令 git config –global http.sslVerify false
C++右值引用个人学习所想
发表于2023-06-30
右值引用实际是基于左值引用进一步延伸出来的,很有意思,左值引用的形式一般为: int &a = XXX; 其中XXX可以是常量和变量的组合 而右值引用是: int &&a = 10; 显而易见,右边必须是一个值,即所谓右值 修改左值引用,就是修改变量的组合形式,或者说改变对变量的引用 修改右值引用,就是修改值对于变量的所有权,或者说修改变量数据所有权。
S7环境下PLC通讯编程方法
发表于2023-03-09
一、设置PLC并启动PLC// 设置PLC连接 MinthPlc::getInstance ()->setDB (15); /*!< 修改了mDBNumber成员变量的值 */ MinthPlc::getInstance ()->setPlc ("192.168.10.2", "0", "0"); // 开启PLC线程,开始读写周期 MinthPlc::getInstance ()->start (); 二、读取PLC中的变量步骤: 1、在handleReadWrite函数中获取对应的PLC变量值 2、通过转换大端序到小端序得到正确的值 3、存入全局成员变量 例子: 1.在MinthPlc 中定义成员变量以下代码在MinthPlc.h中的MinthPlc类中定义: private: float mCurSpeed; /*!< 读取到的PLC中的速度值 */ int mDBNumber; /*!< DB号,就是 ...
A*和最短路径以及最佳路径的联系
发表于2023-03-03
最短路径,顾名思义,关注的是两点之间的线段的权值大小集合最优 最佳路径则是说明某个节点是一个比较好的选择,关注的是这个节点的价值 A*算法则是基于BFS综合考虑了最短路径和最佳路径的寻路算法 总结来说就是将关注点权和线权结合到了一起
记录一次界面程序界面退出但是进程未退出问题解决过程
发表于2023-02-07
记一次程序关闭后不退出问题解决问题:打开软件界面,然后关闭最后一个窗口来退出程序,结果发现窗口关闭成功,但是任务管理器中还是有程序运行解决过程: 1、考虑到没进行其他的操作,故从主界面的构造函数出发,检查所有嫌疑点 2、观察到算法clear函数,发现std::vector没有用swap释放内存,可能导致点云生成后内存泄漏且产生相同的问题,但是考虑到这里还没生成点云,故问题的关键还未找到 3、在initPlc函数中找到了初始化boost::asio服务器的线程代码,代码是异步服务器代码,故暂时锁定在此。 4、进一步分析,boost::asio::io_context类调用了run之后,析构函数中没有调用stop结束,不符合RAII,修复此问题,再次试验发现问题不复存在。
12
avatar
David Peng
文章
11
标签
8
分类
4
Follow Me
公告
This is my Blog
最新文章
守护进程详解:理论与实践2025-03-22
FFPlay项目VideoState详细解释2025-03-22
分享 Shadertoy:探索 GPU 着色器编程的无限可能2025-03-22
系统内存寻址2024-10-20
掩码设计原则2024-02-06
分类
  • Linux1
    • C++1
  • WebGL1
    • GLSL1
标签
Linux GLSL Shadertoy GPU WebGL 着色器编程 Daemon C++
归档
  • 三月 20253
  • 十月 20241
  • 二月 20242
  • 六月 20231
  • 三月 20232
  • 二月 20231
  • 九月 20221
网站资讯
文章数目 :
11
本站访客数 :
本站总访问量 :
最后更新时间 :
©2020 - 2025 By David Peng
框架 Hexo|主题 Butterfly 湘ICP备2023001456号