signal

iOS-关于GCD信号量那些事儿

随声附和 提交于 2020-03-30 19:55:48
随便说说 其实GCD大家都有接触过,也不在解释GCD是什么,为什么突然想说信号量问题,最近这几次面试,当我问到面试者怎么处理多个请求完成后的一系列操作时,有的说造一个临时变量的做追加,其实这样可以,也算是信号量的基本逻辑,有的说用线程做延时操作,怎么延时,怎么操作说的不清楚,有少部分会提到GCD信号量,但是可能说不出来怎么操作,通过信号量的增加与递减,进行网络的并发请求,最后再做网络请求完成后的最终处理;其实实际上大家在做的时候,在网上一搜,基本都能找到; GCD信号量的应用场景,一般是控制最大并发量,控制资源的同步访问,如数据访问,网络同步加载等 简单聊聊 ///创建 dispatch_semaphore_create() ///增加 dispatch_semaphore_signal() ///减去 dispatch_semaphore_wait() 下面用简单的栗子模拟多个网络请求,再进行最终的操作 //创建信号量 dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); //创建队列 dispatch_queue_t queue = dispatch_get_global_queue(0, 0); //创建线程组 dispatch_group_t group = dispatch_group_create(

python blinker库

醉酒当歌 提交于 2020-03-23 19:04:30
Blinker 是一个基于Python的强大的信号库,它既支持简单的对象到对象通信,也支持针对多个对象进行组播。Flask的信号机制就是基于它建立的。 Blinker的内核虽然小巧,但是功能却非常强大,它支持以下特性: 支持注册全局命名信号 支持匿名信号 支持自定义命名信号 支持与接收者之间的持久连接与短暂连接 通过弱引用实现与接收者之间的自动断开连接 支持发送任意大小的数据 支持收集信号接收者的返回值 线程安全 创建信号 信号通过 signal() 方法进行创建: >>> from blinker import signal >>> initialized = signal("initialized") >>> initialized is signal("initialized") True 每次调用 signal('name') 都会返回同一个信号对象。因此这里 signal() 方法使用了单例模式。 订阅信号 使用 Signal.connect() 方法注册一个函数,每当触发信号的时候,就会调用该函数。该函数以触发信号的对象作为参数,这个函数其实就是信号订阅者。 >>> def subscriber(sender): ... print("Got a signal sent by %r" % sender) ... >>> ready = signal('ready') >

sigaction()

点点圈 提交于 2020-03-19 20:43:05
NAME     sigaction - examine and change a signal action SYNOPSIS     #include <signal.h>     int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); DESCRIPTION     The sigaction() system call is used to change the action taken by a process on receipt of a specific signal.      signum specifies the signal and can be any valid signal except SIGKILL and SIGSTOP.     If act is non-null, the new action for signal signum is installed from act. If oldact is non-null, the previous action is saved in oldact.     The sigaction structure is defined as something like      

ELEC4620/7462 Digital Signal Processing

我怕爱的太早我们不能终老 提交于 2020-03-18 04:43:32
ELEC4620/7462 Digital Signal Processing Assignment 3 (Due Date: Monday 16/09/2019 at 5pm) 1. We wish to extract tones at 150 and 250 Hz from tones at 1050 and 1150 Hz and then downsample the output by the largest possible factor. Assume the signal containing the four tones is sampled at 40 kHz. Use a Kaiser window FIR filter with a passband from 0 to 300Hz (3 dB down at band edge) and attenuation > 80 dB at 500 Hz. Implement the filter, maximally downsample the output, and examine the output spectrum to ensure that it meets specifications. Now reimplement the filtering and downsampling with a

读写者

时间秒杀一切 提交于 2020-03-18 04:37:33
首先是读写者问题,这个允许多个读者同时读,然而当读者读的时候,写着不允许写;但多个读者可以同时doReading();而当写者写的时候,读者不允许读; int readCount = 0 , writeCount = 0 ; Semaphore wsem = 1 ; Semaphore mutex = 1 ; void Reader() { while(true) {   // lock the mutex to avoid the consurrent modification of readCount ; wait(mutex) ; readCount ++ ; if (readCount == 1) { wait(wsem) ; } // then other readers can come in , however , writer can't come in , for some readers is still reading . signal(mutex) ; doReading() ; // lock the mutex to avoid the consurrent modification of readCount ; wait(mutex) ; readCount -- ; if (readCount == 0) { signal(wsem) ; }

linux守护进程

人走茶凉 提交于 2020-03-17 19:49:03
#include <signal.h> #include <sys/types/h> #include <sys/stats.h> #include <unistd.h> #include <fcntl.h> void InitDaemon() {   pid_t pid = 0;   if ((pid = fock()) != 0)   {     exit(0);   }   setsid();   signal(SIGINT, SIG_IGN);   signal(SIGHUP, SIG_IGN);   signal(SIGQUIT, SIG_IGN);   signal(SIGPIPE, SIG_IGN);   signal(SIGTTOU, SIG_IGN);   signal(SIGTTIN, SIG_IGN);   signal(SIGCHLD, SIG_IGN);   signal(SIGTERM, SIG_IGN);   signal(SIGHUP, SIG_IGN);   if ((pid = fock()) != 0)   {     exit(0);   }   umask(0); } 来源: https://www.cnblogs.com/damonxu/p/7976403.html

Linux守护进程

别来无恙 提交于 2020-03-16 14:11:43
首先说一下后台进程与守护进程的区别 最大的区别有以下几点: (a)守护进程已经完全脱离终端控制台了,而后台程序并未完全脱离终端(在终端未关闭前还是会往终端输出结果); (b)守护进程在关闭终端控制台时不会受影响,而后台程序会随用户退出而停止,需要在以nohup command & 格式运行才能避免影响; (c)守护进程的会话组和当前目录,文件描述符都是独立的。后台运行只是终端进行了一次fork,让程序在后台执行,这些都没改变; 守护进程的特点 守护进程(Daemon)是在后台运行的一种特殊进程,它脱离于终端,从而这可避免进程被任何终端所产生的信号打断,它在执行进程中的产生信息也不在任何终端上显示。守护进程周期性地执行某种任务或等待处理某些发生的事件,Linux的大多数服务器就是用守护进程实现的。 守护进程编程要点 1.屏蔽一些有关控制终端操作的信号,是为了防止在守护进程没有正常启动起来前,控制终端受到干扰退出或挂起。代码如下: /* 处理可能的终端信号 */ signal(SIGTTOU, SIG_IGN); signal(SIGTTIN, SIG_IGN); signal(SIGTSTP, SIG_IGN); signal(SIGHUP , SIG_IGN); 2.在后台运行。 /* 是父进程,结束父进程,子进程继续 */ if(fork()) exit(0); 3

[学习笔记]信号的高级用法

↘锁芯ラ 提交于 2020-03-15 13:45:33
sigaction函数注册信号处理函数 sigaction 函数 q 包含头文件<signal.h> q 功能:sigaction函数用于改变进程接收到特定信号后的行为。 q 原型: int sigaction(int signum,const struct sigaction *act,const struct sigaction *old); q 参数 q 该函数的第一个参数为信号的值,可以为除SIGKILL及SIGSTOP外的任何一 个特定有效的信号(为这两个信号定义自己的处理函数,将导致信号安装错误) q 第二个参数是指向结构sigaction的一个实例的指针,在结构 sigaction的实例中,指定了对特定信号的处理,可以为空,进程会以缺省方式对信号处理 q 第三个参数oldact指向的对象用来保存原来对相应信号的处理,可指定oldact为NULL。 q 返回值:函数成功返回0,失败返回-1 signal(num., handle) sigaction 结构体 q 第二个参数最为重要,其中包含了对指定信号的处理、信号所传递的信息、信号处理函数执行过程中应屏蔽掉哪些函数等等 struct sigaction { void (*sa_handler)(int); //信号处理程序 不接受额外数据 void (*sa_sigaction)(int, siginfo_t *,

Radio Basics for RFID

ⅰ亾dé卋堺 提交于 2020-03-14 17:30:15
Radio Basics for RFID The following is excerpted from Chapter 3: Radio Basics for UHF RFID from the Book, The RF in RFID: Passive UHF RFID in Practice by Daniel M. Dobkin . Order a copy of The RF in RFID: Passive UHF RFID in Practice before December 31, 2007 to receive an additional 20% off! Visit www.newnespress.com or call 1-800-545-2522 and use code 91090. While this book excerpt from The RF in RFID:Passive UHF RFID in Practice , focuses on RFID applications, it is an excellent primer for RF basics. Part 1 covers electromagnetic waves, signal voltage, and power. Part 2 covers modulation and

QQuickWidget + QML编程实现酷炫动态动画效果

房东的猫 提交于 2020-03-07 17:25:38
1.具体需求:当Qt开发项目中需要实现简单的 动态酷炫动画 效果时,我们可以使用Qt中的 QQuickWidget 来实现,同时还可以使用 QML编程 来实现具体的动画效果,具体实现的效果如下所示: 2.具体操作和实现效果图: 1)按下start按钮,音乐播放界面开始播放,然后出现旋转界面(界面的变化可以通过QML编程来具体实现); 2) 按下stop按钮,音乐播放界面停止; 3)效果图:(样式没有刻意去设计,QML只是简单的旋转效果) stop下的状态图: 开始播放的状态图: 3.具体代码实现分为三部分: 1)Qt的pro工程文件中加入QQuickWidget功能: QT += quickwidgets 2)新建一个工程简单的工程,如下所示: 在工程中添加一个resource新文件,鼠标右键单击工程->添加新文件->Qt->Qt Resource File,然后在resource file下新建一个目录(add prefix),添加一个QML File(Qt Quick 2)文件,取名字为musicPlay.qml,操作步骤和前面一样,添加相关的QML代码,具体如下: import QtQuick 2.0 Item { //首字母大写 visible: true width: 150 height: 150 id: rectangleWidget scale : 1.0