signal信号

QT中 QObject::sender():

巧了我就是萌 提交于 2019-11-29 13:15:28
QT中 QObject::sender(): 1、功能:用于返回发送信号的对象的指针,返回类型为QObject *。当某一个Object emit一个signal的时候,它就是一个sender, 系统会记录下当前是谁emit出这个signal的。你在一个槽里面调用这个函数,就知道是谁触发了这个槽并且可对发信号的对象进行操作。 2、可以解决的问题:可用于一个槽函数接收多个信号,通过sender判断是哪个对象发的信号。 示例代码: ///假如有button1和button2同时连接到该槽 void Widget::Slot_On_Clicked() { QObject * obj = sender(); //返回发出信号的对象,用QObject类型接收 QPushButton *button_tmp = qobject_cast<QPushButton *>(obj); //向下转型为按钮类型 //或者 QPushButton *button_tmp = (QPushButton*) sender(); //强制转换 QString m_ObjectName = button_tmp->text(); //调用发信号者的方法 ///判断是哪个按钮 if(m_ObjectName.compare(QStringLiteral("pushButton_1"))==0) { qDebug()

Linux信号(signal) 机制分析

一个人想着一个人 提交于 2019-11-28 13:02:24
from: https://www.cnblogs.com/subo_peng/p/5325326.html 【摘要】本文分析了Linux内核对于信号的实现机制和应用层 的相关处理。首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理。接着分析了内核对于信号的处理流程包括信号的触发/注册/执行 及注销等。最后介绍了应用层的相关处理,主要包括信号处理函数的安装、信号的发送、屏蔽阻塞等,最后给了几个简单的应用实例。 【关键字】软中断信号,signal,sigaction,kill,sigqueue,settimer,sigmask,sigprocmask,sigset_t 1 信号本质 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。信号机制除了基本通知功能外,还可以传递附加信息。 收到信号的进程对各种信号有不同的处理方法。处理方法可以分为三类: 第一种是类似中断的处理程序,对于需要处理的信号

DBUS基础知识

℡╲_俬逩灬. 提交于 2019-11-28 12:26:49
1. 进程间使用D-Bus通信 D-Bus是一种高级的进程间通信机制,它由freedesktop.org项目提供,使用GPL许可证发行。D-Bus最主要的用途是在Linux桌面环境为进程提供通信,同时能将Linux桌面环境和Linux内核事件作为消息传递到进程。D-Bus的主要概率为总线,注册后的进程可通过总线接收或传递消息,进程也可注册后等待内核事件响应,例如等待网络状态的转变或者计算机发出关机指令。目前,D-Bus已被大多数Linux发行版所采用,开发者可使用D-Bus实现各种复杂的进程间通信任务。 2. D-Bus的基本概念 D-Bus是一个消息总线系统,其功能已涵盖进程间通信的所有需求,并具备一些特殊的用途。D-Bus是三层架构的进程间通信系统,其中包括: 接口层:接口层由函数库libdbus提供,进程可通过该库使用D-Bus的能力。 总线层:总线层实际上是由D-Bus总线守护进程提供的。它在Linux系统启动时运行,负责进程间的消息路由和传递,其中包括Linux内核和Linux桌面环境的消息传递。 包装层:包装层一系列基于特定应用程序框架的Wrapper库。 D-Bus具备自身的协议,协议基于二进制数据设计,与数据结构和编码方式无关。该协议无需对数据进行序列化,保证了信息传递的高效性。无论是libdbus,还是D-Bus总线守护进程,均不需要太大的系统开销。 总线是D

linux信号(signal)

扶醉桌前 提交于 2019-11-28 08:10:40
一、signal本质 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。在软件层次上是对中断机制的一种模拟。 二、signal各种类型 处理动作一项中的字母含义如下 A 缺省的动作是终止进程 B 缺省的动作是忽略此信号 C 缺省的动作是终止进程并进行内核映像转储(dump core) D 缺省的动作是停止进程 E 信号不能被捕获 F 信号不能被忽略 POSIX.1中列出的信号: 信号 值 处理动作 发出信号的原因 ---------------------------------------------------------------------- SIGHUP 1 A 终端挂起或者控制进程终止 SIGINT 2 A 键盘中断(如break键被按下) SIGQUIT 3 C 键盘的退出键被按下 SIGILL 4 C 非法指令 SIGABRT 6 C 由abort(3)发出的退出指令 SIGFPE 8 C 浮点异常 SIGKILL 9 AEF Kill信号 SIGSEGV 11 C 无效的内存引用 SIGPIPE 13 A 管道破裂: 写一个没有读端口的管道 SIGALRM 14 A 由alarm(2)发出的信号 SIGTERM 15 A 终止信号 SIGUSR1 30,10,16 A 用户自定义信号1 SIGUSR2 31,12,17 A 用户自定义信号2

signal(SIGHUP, SIG_IGN)的含义

我的未来我决定 提交于 2019-11-27 22:15:22
signal(SIGHUP, SIG_IGN); signal信号函数,第一个参数表示需要处理的信号值(SIGHUP),第二个参数为处理函数或者是一个表示,这里,SIG_IGN表示忽略SIGHUP那个注册的信号。 SIGHUP和控制台操作有关,当控制台被关闭时系统会向拥有控制台sessionID的所有进程发送HUP信号,默认HUP信号的action是 exit,如果远程登陆启动某个服务进程并在程序运行时关闭连接的话会导致服务进程退出,所以一般服务进程都会用nohup工具启动或写成一个 daemon。 转载于:https://www.cnblogs.com/jasonliu/archive/2012/01/19/2326179.html 来源: https://blog.csdn.net/weixin_30591551/article/details/99768676

DBUS入门与应用

谁都会走 提交于 2019-11-26 05:14:04
转载自:http://www.cnblogs.com/liyiwen/archive/2012/12/02/2798876.html,作者: 唐风 DBUD的C编程接口 最近在学 Dbus,不过总是不得其门而入。 大部分资料都讲了很多东西却最终没有让我搞清楚怎么用 DBus ,不就是一个 IPC 通信的工具么?就没有一点实用些的资料么?看了很多资料之后还是觉得只见树木不见森林。仔细整理下思路,觉得还是应该从最基本的方面入门,先从 DBus 的 C API 入手学习,有了这些知识,就算麻烦,也可以先在完成一个基本功能的例子程序的同时大概的知道 DBus 的运行机制。 在网上找到这么一篇文章: http://www.matthew.ath.cx/misc/dbus , 正合我意,下面的内容基本是对这篇文章的翻译和扩充。 注意: 翻译没有得到原文作者同意,原文也很简单易懂,最好去读原文。如果收到投诉,我会立即撤掉本文的。 本文不是一篇好的 DBus 入门,有很多基本的东西不在记述之内。 一般情况下不会直接使用 C API 进行 DBus 的编程,而是使用某种 DBus-binding,但我觉得理解 DBus 的 C API 对完整地理解 DBus 是非常重要的。 虽然 DBus 是用 C 写的,而且本文写的是 C API,但是 DBus 设计中充满的面向对象的思想,请注意。 一

Linux信号signal

情到浓时终转凉″ 提交于 2019-11-25 23:17:16
如何让程序在后台运行 在之前的章节中,如果要运行程序,在命令提示行下输入程序名后回车,程序被执行,然后等待程序运行完成。在程序运行的过程中,可以用 Ctrl+c 中止它。 在实际开发中,我们需要让程序在后台运行,不受界面的影响,也不让程序员等待,例如前几章节的socket服务端程序。 如果想让程序在后台运行,有两种方法。 1、加“&”符号 如果想让程序在后台运行,执行程序的时候,命令的最后面加“&”符号。 如: ./book242 & 程序就在后台运行了。 在后台运行的程序,用Ctrl+c无法中断,并且就算终端退出了,程序仍在后台运行。 如果终端退出了,后台运行的程序将由系统托管。 在第一张图中,book249的父进程是4555,第二张图中,book249的父进程是1。 2、采用fork 另一种方法是采用fork,主程序执行fork,生成一个子进程,然后父进程退出,留下子进程继续运行,子进程将由系统托管。 示例: 上图中,突出显示的就是新增的代码。 上图中,子进程的父进程是系统进程。 3、如何让中止后台程序 问题来了,程序在后台运行了,离开了终端控制,用Ctrl+c上也无法中止,那怎么让它停下来呢?暂时用一个笨方法:杀了它。 杀程序有两个方法: 1 )killall 程序名 killall book249 2 )先用“ps -ef|grep 程序名”找到程序的进程编号,然后用