嵌入式工作项目中的线程管理(监控线程和重启线程的具体实现)

article/2025/8/21 12:53:27

嵌入式工作项目中的线程管理(监控线程和重启线程的具体实现)

1. 背景

环境:ARMv7,Linux;
软件所处位置:应用层;
问题出现概率:偶先,概率极小;
问题描述: 一个负责校时的进程,里面有一个是网络校时的线程和一个 GPS 校时的线程,还有处理其他一些业务的线程;出现问题时,两个负责校时的线程都阻塞了,没有任何 Log 打印,但是其他业务的线程依然有打印,整个进程也没有出现崩溃;由于出现问题时,机器本身记录的日志有限,有些已经被覆盖了,所以只能从代码去正向分析。最后只能找到网络校时中其中一个去解析 IP 地址的函数是会阻塞的,而 GPS 的线程暂时则找不出阻塞点,因为获取数据时是有设置超时的;
解决方案: 主线程负责监控底下的所有非阻塞线程,采用“心跳机制”,若线程失去心跳超过规定时间则将其重启。且如果在关闭线程时,存在超过5秒未关闭成功的情况下,将执行进程“自杀”。

2. 修改前的做法

2.1 类图

在这里插入图片描述

2.2 实现步骤

在这里插入图片描述
在主线程中,启动两个线程,一个分离出去,一个又主线程阻塞等待回收资源。

2.3 代码实现

// Thread.h 基类
#ifndef _THREAD_H_
#define _THREAD_H_#include <pthread.h>class Thread
{
public:Thread();virtual ~Thread();void Start();//创建线程//-> ThreadRoutine()//-> Run()void Join();void Detach();private:static void* ThreadRoutine(void* arg);virtual void Run() = 0;pthread_t threadId_;
};#endif // _THREAD_H_
//Thread.cpp
#include "Thread.h"Thread::Thread()
{
}Thread::~Thread()
{
}void Thread::Start()
{pthread_create(&threadId_, NULL, ThreadRoutine, this);
}void Thread::Join()
{pthread_join(threadId_, NULL);
}void Thread::Detach()
{pthread_detach(threadId_);
}void* Thread::ThreadRoutine(void* arg)
{Thread* thread = static_cast<Thread*>(arg);thread->Run();return NULL;
}
//classA.h 派生类
#ifndef _CLASSA_H_
#define _CLASSA_H_#include "Thread.h"class classA : public Thread
{
public:classA();virtual ~classA();private:virtual void Run();
};#endif

classB跟classA是一样的实现,这里就不列举了。

//main.cpp 主线程
#include "classA.h"
#include "classB.h"int main()
{classA classA;classB classB;classA.Start();classA.Detach();classB.Start();classB.Join();return 0;
}

这就是原本的实现,没有线程监控和重启线程的实现,所以若出现某个线程一直阻塞着,就不能自行恢


http://www.hkcw.cn/article/kjdvfYmMyE.shtml

相关文章

【图像处理基石】立体匹配的经典算法有哪些?

1. 立体匹配的经典算法有哪些&#xff1f; 立体匹配是计算机视觉中从双目图像中获取深度信息的关键技术&#xff0c;其经典算法按技术路线可分为以下几类&#xff0c;每类包含若干代表性方法&#xff1a; 1.1 基于区域的匹配算法&#xff08;Local Methods&#xff09; 通过…

Unity QFramework 简介

目录 什么是MVC模式&#xff1f; QFramework 架构提供了 Model 的概念 QFramework 架构引入 Command 的方式 QFramework 架构引入 Event事件机制 四个层&#xff1a;表现层、系统层、数据层、工具层 委托和回调函数的关系 命令和事件的区别 工具篇 QFramework整体基于M…

非线性声学计算与强化学习融合框架:突破复杂环境人机交互的新技术

随着人工智能的快速发展&#xff0c;尤其是在深度学习和强化学习领域&#xff0c;声学计算和人机交互进入前所未有的扩展和创新阶段。尽管传统声学方法取得了显著成功&#xff0c;但这些线性或准线性方法在实际环境中往往存在关键的不足&#xff0c;尤其在动态、复杂或混响环境…

广东河源再发3.0级地震 近期无大震风险

广东河源再发3.0级地震 近期无大震风险!中国地震台网正式测定,5月30日2时21分在广东河源市源城区(北纬23.72度,东经114.68度)发生3.0级地震,震源深度10千米。河源市地震局表示,目前未收到人员伤亡和财产损失报告。该局会商研判认为,本次地震是前一天5月29日13时17分发生…

极致视频压缩日记 - 1.2GB=>200MB - 低码率高画质 - 批量多目录自动转换脚本

效果图 格式av10.3M的码率&#xff0c;跟格式h.2645M的码率&#xff0c;画质竟然差不多&#xff01; GPU拉满全速编码&#xff01; 目标 1.视频瘦身储存&#xff0c;画质不变 2.自动批量压缩视频&#xff0c;多层目录递归处理 (脚本https://www.amjun.com/2327.html) 3.免费 (…

媒体:升学不再只有“独木桥” 职教贯通培养拓宽道路

媒体:升学不再只有“独木桥” 职教贯通培养拓宽道路!随着职教贯通培养模式的不断推进,我国学生的升学选择已经更加多元。高考不再是唯一的出路。5月28日,教育部公布2025年全国高考报名人数为1335万人,比2024年的1342万人减少7万人。这是自2017年以来高考报名人数首次减少。…

多地曝“谷子店”闭店消息 “谷子经济”面临转型挑战

手办模玩生产车间里,年轻人正在参与“谷子”涂装工作。消费者正在挑选“谷子”。“谷子经济”还能像过去那样“丰收”吗?挣“二次元”的钱,难不难?不只是做单一的“谷子”销售,还自主开发产品,做IP代运营,一步一步介入“谷子经济”全链条。自己开发App,为平台用户建立“…

我国入境游出境游持续升温 双向奔赴激发市场活力

走进2025上海国际旅游交易博览会现场,可以感受到入境和出境旅游市场的繁荣。中外客商、展商根据满满的时间表,听宣讲、看项目、谈合作,为世界旅游市场注入动力。今年的上海国际旅游交易博览会于5月27日至29日举行,吸引了来自全球80多个国家和地区的700多家展商参展,展会规…

白宫称美国法院“叫停”关税是司法越权

美国联邦巡回上诉法院当地时间29日批准特朗普政府的请求,暂时中止美国国际贸易法院此前做出的禁止执行特朗普政府对多国加征关税措施的行政令的裁决。自美国国际贸易法院28日裁定禁止执行美政府多个关税行政令后,特朗普政府多名官员就指责这一裁决,提起了上诉。△白宫新闻秘…

运镜决定节奏:AI视频创作中的动态叙事法则

在AI视频创作工具日益普及的今天&#xff0c;如何通过镜头语言精准掌控节奏&#xff0c;成为创作者的核心竞争力。运镜——即镜头的移动方式&#xff08;如推、拉、摇、移&#xff09;与视角选择&#xff08;如仰拍、俯拍、主观视角&#xff09;——不仅是技术操作&#xff0c;…

【Redis】string

String 字符串 字符串类型是 Redis 最基础的数据类型&#xff0c;关于字符串需要特别注意&#xff1a; 首先 Redis 中所有的键的类型都是字符串类型&#xff0c;而且其他几种数据结构也都是在字符串的基础上构建的。字符串类型的值实际可以是字符串&#xff0c;包含一般格式的…

Java 文件操作 和 IO(3)-- Java文件内容操作(1)-- 字节流操作

Java 文件操作 和 IO&#xff08;3&#xff09;-- Java文件内容操作&#xff08;1&#xff09;-- 字节流操作 文章目录 Java 文件操作 和 IO&#xff08;3&#xff09;-- Java文件内容操作&#xff08;1&#xff09;-- 字节流操作观前提醒&#xff1a;1. Java中操作文件的简单介…

MySQL进阶篇(存储引擎、索引、视图、SQL性能优化、存储过程、触发器、锁)

MySQL进阶篇 存储引擎篇MySQL体系结构存储引擎简介常用存储引擎简介存储引擎的选择 索引篇索引简介索引结构(1)BTree索引(2)hash索引 索引分类索引语法SQL性能分析指标(1)SQL执行频率(2)慢查询日志(3)profile详情(4)explain或desc执行计划 索引使用引起索引的失效行为SQL提示覆…

造血干细胞移植中,选择合适供者需综合多因素考量

KIR 单体型即杀伤细胞免疫球蛋白样受体&#xff08;KIR&#xff09;单体型&#xff0c;是指 KIR 基因在染色体上特定的组合形式 。主要内容如下&#xff1a; 分类 着丝粒单体型&#xff08;C 型&#xff09;&#xff1a;含有较多的抑制性 KIR 基因&#xff0c;这些基因编码的…

四.MySQL数据类型

数据类型分类 一.数值类型 1.tinyint类型 MySQL 整数类型范围&#xff08;有符号 / 无符号&#xff09; 类型字节最小值&#xff08;有符号/无符号&#xff09;最大值&#xff08;有符号/无符号&#xff09;TINYINT1-128 / 0127 / 255SMALLINT2-32,768 / 032,767 / 65,535ME…

深度解构:Profinet转Profibus网关如何重塑产品分离装置的控制逻辑

PROFINET是一种基于以太网的工业以太网通讯协议&#xff0c;而PROFIBUS则是一种国际化的现场总线标准。在很多工业生产环境中&#xff0c;这两种通讯方式都有其各自的应用场合和优势。当产品分离装置需要同时使用PROFINET和PROFIBUS进行通信时&#xff0c;无锡耐特森PROFINET转…

EasyVoice:开源的文本转语音工具,让文字“开口说话“

名人说&#xff1a;博观而约取&#xff0c;厚积而薄发。——苏轼《稼说送张琥》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、EasyVoice是什么&#xff1f;1. 核心特性一览2. 技术架构概览 二、安装部署指南…

外航飞机疑盲降国内在建跑道 机组认错跑道复飞

5月28日,有网友发帖称,一架外国航空公司的飞机在降落西安咸阳国际机场时发生意外状况,疑似盲降正在建设中的跑道,接地后复飞。该事件引发网友关注。据网友所述,该飞机在准备降落时,地面指令让落23L(南一跑道),结果落向24L(正在建的南二跑道),然后指挥复飞了,最后落…

[Redis] Redis:高性能内存数据库与分布式架构设计

标题&#xff1a;[Redis] 浅谈分布式系统 水墨不写bug 文章目录 一、什么是Redis&#xff1f;一、核心定位二、核心优势三、典型应用场景四、Redis vs 传统数据库 二、架构选择与设计1、单机架构&#xff08;应用程序 数据库服务器&#xff09;2、应用程序和数据库服务器分离3…

论坛项目测试报告

一、项目背景 1.1 测试目标 验证论坛功能完整性&#xff0c;确保用户个人中心、发布/删除管理、模块分类控制、搜索功能等核心模块 符合需求。 1.2 项目技术栈 后端&#xff1a;Spring Boot/Spring MVC 数据库&#xff1a;MySQL 前端&#xff1a;原生 HTML/CSS/AJAX 二、…