当前位置: 首页 > news >正文

信号处理以及队列

下面是一个使用C++和POSIX信号处理以及队列的简单示例。这个示例展示了如何使用信号处理程序将信号放入队列中,并在主循环中处理这些信号。

#include <iostream>
#include <csignal>
#include <queue>
#include <mutex>
#include <thread>
#include <chrono>std::queue<int> signalQueue; // 信号队列
std::mutex queueMutex; // 互斥锁,用于保护队列// 信号处理程序
void signalHandler(int signal) {std::lock_guard<std::mutex> lock(queueMutex); // 锁定队列signalQueue.push(signal); // 将信号放入队列std::cout << "Signal " << signal << " received and added to queue." << std::endl;
}// 主处理函数
void processSignals() {while (true) {std::this_thread::sleep_for(std::chrono::seconds(1)); // 模拟处理间隔std::lock_guard<std::mutex> lock(queueMutex); // 锁定队列while (!signalQueue.empty()) {int signal = signalQueue.front(); // 获取队列前端信号signalQueue.pop(); // 移除信号std::cout << "Processing signal: " << signal << std::endl;}}
}int main() {// 注册信号处理程序std::signal(SIGINT, signalHandler); // 处理Ctrl+C信号std::signal(SIGTERM, signalHandler); // 处理终止信号// 启动信号处理线程std::thread processor(processSignals);// 主线程继续运行std::cout << "Press Ctrl+C to send SIGINT or send SIGTERM to terminate." << std::endl;// 等待处理线程结束processor.join();return 0;
}

代码说明:
信号处理程序:当接收到信号(如SIGINT或SIGTERM)时,信号处理程序会将信号放入一个线程安全的队列中。
主处理函数:在一个单独的线程中,主处理函数定期检查队列,并处理所有待处理的信号。
互斥锁:使用互斥锁确保对队列的访问是线程安全的。
使用方法:
编译并运行程序。
按 Ctrl+C 或发送 SIGTERM 信号(例如使用 kill 命令)来触发信号处理程序。
这个示例展示了如何有效地使用队列来处理信号,从而避免在信号处理程序中执行复杂的逻辑。如果你有更多问题或需要进一步的信息,请告诉我!

http://www.lryc.cn/news/528618.html

相关文章:

  • Linux pkill 命令使用详解
  • react注意事项
  • 【开源免费】基于SpringBoot+Vue.JS在线考试学习交流网页平台(JAVA毕业设计)
  • 怎样在PPT中启用演讲者视图功能?
  • UE AController
  • H264原始码流格式分析
  • JAVA 接口、抽象类的关系和用处 详细解析
  • 反向代理模块b
  • Nuitka打包python脚本
  • pytorch线性回归模型预测房价例子
  • 练习题 - DRF 3.x Caching 缓存使用示例和配置方法
  • 如何解压7z文件?8种方法(Win/Mac/手机/网页端)
  • python学opencv|读取图像(五十)使用addWeighted()函数实现图像加权叠加效果
  • window中80端口被占用问题
  • 06-机器学习-数据预处理
  • 电梯系统的UML文档12
  • 萌新学 Python 之运算符
  • 嵌入式知识点总结 Linux驱动 (五)-linux内核
  • zabbix7 配置字体 解决中文乱码问题(随手记)
  • 预测不规则离散运动的下一个结构
  • CTFSHOW-WEB入门-命令执行29-32
  • SQL Server 建立每日自动log备份的维护计划
  • doris:HLL
  • 双层Git管理项目,github托管显示正常
  • 准备知识——旋转机械的频率和振动基础
  • 知识库管理驱动企业知识流动与工作协同创新模式
  • CMake常用命令指南(CMakeList.txt)
  • 【回溯+剪枝】找出所有子集的异或总和再求和 全排列Ⅱ
  • 中国技术突破对国际格局的多维影响与回应
  • 【漫话机器学习系列】068.网格搜索(GridSearch)