分析Poco中ServerApplication监听中断机制

Poco教程(一):使用Poco库建立Http Server Poco 是基于C++ 的一个网络库,主要有以下特点: 使用高效的,现代的标准ANSI/ISO C++,并基于STL  高可移植性,支持多种平添,包括Windows,Linux,OS X 等使用高效的,现代的标准ANSI/ISO C++,并基于STL,完全免费 官网连接:http://pocoproject.org/download/index.html 本文介绍一下使用P 阅读详情

使用Poco::Util::ServerApplication构建Tcp服务器,我们打算在住循环中设置中断机制,仔细考察Poco代码,发现已经提供一个比较完善的方案。

Poco::Util::ServerApplication监听中断机制,主要是通过waitForTerminationRequest()实现的,该函数被调用后,将阻塞调用他的线程,直到收到监听的信号,函数源码如下。

void ServerApplication::waitForTerminationRequest()
{
	sigset_t sset;
	sigemptyset(&sset);
	if (!std::getenv("POCO_ENABLE_DEBUGGER"))
	{
		sigaddset(&sset, SIGINT);
	}
	sigaddset(&sset, SIGQUIT);
	sigaddset(&sset, SIGTERM);
	sigprocmask(SIG_BLOCK, &sset, NULL);
	int sig;
	sigwait(&sset, &sig);
}


1. sigset_t sset;                 // 设置信号集
2. sigemptyset(&sset);      // 置空信号集
3. sigaddset(&sset, SIGINT);    // 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出
    sigaddset(&sset, SIGQUIT); // 程序终止(interrupt)信号, 由QUIT字符(通常是Ctrl-\)来控制
    sigaddset(&sset, SIGTERM); // 程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出,
4. sigprocmask设定对信号屏蔽集内的信号的处理方式(阻塞或不阻塞),waitForTerminationRequest明显是阻塞。
5. 核心实现是利用sigwait(&sset, &sig),sigwait监听信号集sset中所包含的信号,并将其存在sig中。sigwait函数在调用后将阻塞调用他的线程,直到收到它所监听的信号发生了,然后sigwait将其从未决队列中取出。
6. 同时,Poco::Util::ServerApplication提供一个terminate()接口,用于发送程序结束信号SIGTERM,用于正常结束整个进程。


手把手教你如何使用Poco TCPServer框架 1 TCPServer 框架概述 POCO 库提供TCPServer框架,用以搭建自定义的 TCP 服务器。TCPServer维护一个连接队列、一个连接线程池。连接线程用于处理连接,连接线程只要一空闲就不断地从连接队列中取连接并进行处理。一旦连接线程从连接队列中取到一个连接,就会创建一个TCPServerConnection连接对象,并且调用该对象的start()方法,直到start()方法返回... 阅读详情

相关推荐

【C++】POCO学习总结(十):Poco::Util::Application(应用程序框架)

在Linux平台上,继承Poco::Util::ServerApplication后,可以通过命令行参数“–daemon”来实现,作为守护进程运行。

郭老二 3386

poco线程池设计

Poco::Net提供了很多便利的开发组件。尽管Poco目前还不是一个很完美的C++类库,但是它从设计上和使用的简易程度上都有着较为超前的理念。 大概是去年年底,我开始使用Poco::Net封装的网络通信库取代了boost::asio,直至现在Poco的文档也并不多,不过使用方法很有套路性。Poco封装的组件可以说已经把开发者绑死在了这种固定的使用模式上,因此可以很轻易地搭建一个TCPSer

lishenglong666的专栏 2686

POCO::NET::TCPServer框架学习以及使用

POCO::NET::TCPServer框架学习以及使用 一、预备知识: 1、POCO ​ POCO C++ Libraries是一套第三方库,去年的这个时候才进入公司实习,前辈让我接触这个库很难受官网全是英文:https://pocoproject.org/,GitHub:https://github.com/pocoproject/poco ,库方法查找:https://pocoprojec...

SaySomething 4798

poco C++ 定时发送https请求

pContext这里构建的时有两个版本,一个 是NetSSL_Win里面的就如下面的,参数少了两个参数。还有一个是NetSSL_OpenSSL这个的Context初始化函数会多两个,windwos其实无所谓,就是NetSSL_OpenSSL这个需要对应的dll和头文件.编译的时候还是会需要下载openssl的环境的。这里我使用poco的定时器Timer,新建一个,TimerMessagePush 的类,指定CheckPush这个方法为定时启动的任务。启动之后间隔2000ms触发一次,每一天触发一次。

这个人很懒,什么都没有留下 720

轻量级C++网络库poco文档

C++网络库POCO的文档。POCO是轻量级的网络库,适用于网络开发,如HTTP等

Windows(Win10、Win11)本地部署开源大模型保姆级教程

最近开源大模型可谓闹的沸沸扬扬,尤其是Microsoft开源的和Meta开源的llama3 70b,评测都已经接近了的水平。鉴于还有很多同学不会在上部署和使用本地模型,因此我们出一期保姆级教程。本文讲述了如何在上本地部署大模型。从最基础的软件安装到环境配置都进行了截图展示,希望对非计算机的同学也有所帮助。AI时代我们每个人都必须要掌握一些AI知识,相信不断学习的你一定不会被AI淘汰。这只是开始,后面我们还有很多工作要做,尤其是提示词和智能体。

AIGIS的博客 3万+

使用poco库,实现tcp server例子

poco tcp server

学习记录 2159

计算机三级考试嵌入式系统重点精简汇总

第一章 嵌入式系统概论 1.1.1嵌入式系统 (1)特点:(1)专用性;(2)隐蔽性;(3)资源受限;(4)高可靠性;(5)实时性;(6)软件固化。 (2)应用:(1)冰箱、洗衣机、电饭煲、空调、摄影机、DVD播放器等;(2)数控机床、飞机、汽车、电梯、X光机、血压计等;(3)电话机、传真机、打印机、pos机、GPS导航仪、路由器等。 1.1.2嵌入式系统组成与分类 (1)逻辑组成:硬件和软件,分为处理器、存储器、I|0设备与I|O接口,数据总线; (2)处理器:分为主处理器(CPU)和协处

chemkrik的博客 1万+

Reactor实战-百万TCP连接

水平触发: 小数据 listenfd:水平触发 边缘触发: 数据量比较大 分界点: 取决于,一次性能否读完数据:一次读完小数据;否则是大数据 修改fd数量: ulimit -a 协议栈:/etc/sysctl.cof net.ipv4.tcp_mem = 262144 524288 786432 net.ipv4.tcp_wmem= 1024 1024 2048 net.ipv4.tcp_rmem = 1024 1024 2048 1 100listenfd, 分别放在不同的线程 2 监听一个端口:88

qq_38731735的博客 858

Android SSL证书固定实战:原理、方案与避坑指南

SSL/TLS协议是保障网络通信安全的基石,其核心原理是通过非对称加密和数字证书实现身份认证与数据加密。在移动应用开发中,为了防止中间人攻击,证书固定技术应运而生,它通过将服务器证书或公钥的哈希值预置在应用内,强制校验服务器身份,从而大幅提升通信链路的安全性。这一技术对于金融、电商等高安全要求场景尤为重要。本文聚焦Android平台,深入解析SPKI固定、Network Security Configuration与OkHttp CertificatePinner等主流方案,并针对证书更新、调试兼容等常见痛

weixin_33935636的博客 403

在Ubuntu 22.04 LTS上搞定Intel Quartus Prime 22.1和QuestaSim:一份保姆级的安装与License配置指南

本文提供在Ubuntu 22.04 LTS上安装和配置Intel Quartus Prime 22.1与QuestaSim的详细指南。涵盖依赖安装、环境变量设置、License配置及常见问题解决,帮助FPGA开发者快速搭建稳定的开发环境。特别针对Ubuntu系统优化,确保工具链高效运行。

weixin_29208077的博客 318

POCO C++库导游

<br />英文原文: http://pocoproject.org/docs/00100-GuidedTour.html#2<br /> <br />简介<br />POCO C++库是开源的用于简化和加速C++开发面向网络、可移植应用程序的C++库集,POCO库和C++标准库可以很好的集成并填补了C++标准库缺乏的功能空隙。POCO库的模块化、高效的设计及实现使得POCO特别适合嵌入式开发。在嵌入式开发领域,由于C++既适合底层(设备I/O、中断处理等)和高层面向对象开发,越来越流行。当然POCO也准备

it_fly的专栏 4089

ThinkBook 16p 2024 BIOS降压定频实战:从解锁CFG Lock到AC Loadline调优

高性能笔记本在满载时频繁撞上温度墙,通常源于固件层默认电压冗余过大,而系统级降压工具又受限于CFG Lock锁定。要根治问题,需要从BIOS固件层面理解电压管理机制——AC/DC Loadline参数控制着CPU在不同负载下的电压请求,通过修改这些负载线值可以安全降低电压,解锁CFG Lock后还能让XTU、ThrottleStop等软件调参工具恢复可用。这种BIOS级调优在工程实践中广泛用于改善散热、稳定频率、压降风扇噪音,尤其适用于联想ThinkBook 16p 2024与拯救者Y9000P等采用HX平

weixin_32496547的博客 388

力荐的C++库和开源框架

(1)ACE 庞大、复杂,适合大型项目。开源、免费,不依赖第三方库,支持跨平台。 http://www.cs.wustl.edu/~schmidt/ACE.html (2)Asio Asio基于Boost开发的异步IO库,封装了Socket,简化基于socket程序的开发。 开源、免费,支持跨平台。 Asio C++ Library (3)POCO POCO C++ Libraries 提供一套 C++ 的类库用以开发基于网络的可移植的应用程序,功能涉及线程、线程同步、文件系统访问、流操作、

大余里,大余的干货分享 2781

Windows系统下AutoDock 4.2.6安装避坑指南(附MGLTools配置技巧)

本文详细介绍了在Windows系统下安装和配置AutoDock 4.2.6的完整流程,特别针对分子对接研究中常见的软件安装问题提供了解决方案。从环境准备、分步安装到常见报错处理,涵盖MGLTools配置技巧、工作目录设置和环境变量优化,帮助科研人员快速搭建稳定的分子对接平台。

weixin_29234239的博客 313

避坑指南:Qt5.14.2 ARM交叉编译中那些你可能遇到的‘坑’及解决方案

本文深度解析了Qt 5.14.2在ARM架构上进行交叉编译的完整流程与常见难题。重点阐述了如何精准匹配交叉编译器与目标板环境、正确配置sysroot以及使用configure参数的艺术,并针对编译过程中的头文件缺失、链接错误等典型“坑”提供了经过验证的解决方案,旨在帮助开发者成功构建适用于嵌入式设备的Qt运行时库。

weixin_29279101的博客 354

基于POCO服务端程序

如下是基于POCO库TCP的server端程序,能够监听多个socket连接 #include "Poco/ByteOrder.h" #include "Poco/Net/IPAddress.h" #include "Poco/Net/ServerSocket.h" #include "Poco/Net/TCPServer.h" #include "Poco/Net/SocketAddress.h" #include "Poco/Net/TCPServerConnectionFactory.h" #in

冬暖海洋 1033

ROS从入门到精通1-1:ROS核心架构、常用指令与计算图

本文介绍ROS的核心架构,各个文件、目录的用途、常用命令行工具、动态计算图原理。

FRIGIDWINTER的博客 6369

Airtest入门及使用poco控件录制脚本(windows系统-搜索小案例)

airtest 介绍 airtest使用截屏录制脚本和使用poco控件录制脚本。会点python用起来更nice了。 Airtest是网易出品的一款基于图像识别和poco控件识别的一款UI自动化测试工具。 airtest是一个跨平台的UI自动化测试工具,推出了强大的自动化编辑工具,airtest IDE。 airtest IDE 提供了两个测试框架,airtest和poco。 a...

u013405658的博客 8189

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

POCO库中文编程参考指南(8)丰富的Socket编程

POCO库中文编程参考指南(8)丰富的Socket编程 作者:柳大·Poechant 博客:Blog.youkuaiyun.com/Poechant 邮箱:zhongchao.ustc#gmail.com (# -&gt; @) 日期:April 16th, 2012 1 POCO 中的 Socket POCO 中有 丰富的 Socket 封装。其继承关系如下: 本文暂且只介绍 StreamSocke...

278

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Introduction A Guided Tour of the POCO

OCOC++库是开源的用于简化和加速C++开发面向网络、可移植应用程序的C++库集,POCO库和C++标准库可以很好的集成并填补了C++标准库缺乏的功能空隙。POCO库的模块化、高效的设计及实现使得POCO特别适合嵌入式开发。在嵌入式开发领域,由于C++既适合底层(设备I/O、中断处理等)和高层面向对象开发,越来越流行。当然POCO也准备好了面对企业级挑战。 包含4个核心库及一些附加库.

六石 1037

Poco Application 框架学习(2)增加命令行参数

接着学习 Application  框架。我们一般的应用程序都会有提供的几个参数。-h, –help, -v –version, –daemon。下面我们就介绍下这些功能的实现。 Application 提供了一个 defineOptions( OptionSet & option ) 的方法。一个派生类想要支持命令行参数必须重载此方法,并且调用基类的此方法。 惨数:OptionSet 只是Op

yuhaiyang457288的专栏 4076

pocoserver无限重启_Poco库实现简单的http服务器

// TState.cpp : Defines the entry point for the console application.//#include "TState.h"#include #include #include #include "Poco/Net/DNS.h"#include "Poco/Net/ServerSocket.h"#include "Poco/Net/Stream...

weixin_39814454的博客 671

Poco C++库网络模块例子解析2-------HttpServer

//下面程序取自 Poco 库的Net模块例子----HTTPServer 下面开始解析代码 #include "Poco/Net/HTTPServer.h" //继承自TCPServer 实现了一个完整的HTTP多线程服务器 #include "Poco/Net/HTTPRequestHandler.h" //抽象基类类 被HttpServer所创建 用来处理...

weixin_30316097的博客 771

使用NETTY实现TCP的服务端

Netty是一个异步事件驱动的网络应用框架,可快速开发可维护的高性能协议服务器和客户端。基于NIO实现的高性能网络IO框架,极大简化基于常用网络协议的编程(TCP、UDP等)。

平头哥的博客 3870
上一篇: 使用gdb调试内存重复释放导致的malloc_error_break错误崩溃
下一篇: Unity3d编辑器中missing an assembly reference System.Data的处理办法
morphyyang
博客等级 码龄12年 3粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值