obs源码分析 - signal

简介: obs源码分析 - signal

obs源码分析 - signal

  ‍

简介

  Signals用于所有基于事件得回调

API

#include<callback/signal.h>

signal_handler_create

  创建新的信号处理程序对象

signal_handler_t *signal_handler_create(void);

signal_handler_destroy

  销毁信号处理程序。

void signal_handler_destroy(signal_handler_t* handler);

signal_handler_add

  相信信号处理程序添加多个信号

  • handler: 信号处理程序对象
  • signal_decl: 信号声明字符串
bool signal_handler_add(signal_handler_t *handler, const char *signal_decl)
{
    struct decl_info func = {0};
    struct signal_info *sig, *last;
    bool success = true;

    if (!parse_decl_string(&func, signal_decl)) {
        blog(LOG_ERROR, "Signal declaration invalid: %s", signal_decl);
        return false;
    }

    pthread_mutex_lock(&handler->mutex);

    sig = getsignal(handler, func.name, &last);
    if (sig) {
        blog(LOG_WARNING, "Signal declaration '%s' exists", func.name);
        decl_info_free(&func);
        success = false;
    } else {
        sig = signal_info_create(&func);
        if (!last)
            handler->first = sig;
        else
            last->next = sig;
    }

    pthread_mutex_unlock(&handler->mutex);

    return success;
}

signal_handler_add_array

  相信信号处理程序添加多个信号

  • handler: 信号处理程序对象
  • signal_decls: 信号声明字符串数组

static inline bool signal_handler_add_array(signal_handler_t *handler,
                        const char **signal_decls)
{
    bool success = true;
    if (!signal_decls)
        return false;

    while (*signal_decls)
        if (!signal_handler_add(handler, *(signal_decls++)))
            success = false;

    return success;
}

signal_handler_connect

  将回调连接到信号处理程序上的信号, 如果已经绑定,则不进行任何操作.

  • handler: 信号处理程序对象
  • signal: 要处理的信号名称
  • callback: 信号回调
  • data: 传递给回调的私有数据
void signal_handler_connect(signal_handler_t* handler, 
                            const char* signal, 
                            signal_callback_t callback, 
                            void* data);
void signal_handler_connect_ref(signal_handler_t* handler, 
                                const char* signal, 
                                signal_callback_t callback, 
                                void* data);

signal_handler_disconnect

  断开回调与信号处理程序上的信号的连接。

  • handler: 信号处理程序对象
  • signal: 要处理的信号名称
  • callback: 信号回调
  • data: 传递给回调的私有数据
void signal_handler_disconnect(signal_handler_t* handler, 
                                            const char* signal, 
                                            signal_callback_t callback, 
                                            void* data);

signal_handler_signal

  触发信号, 调用所有连接的回调

  • handler: 信号处理程序对象
  • signal: 要处理的信号名称
  • params: 要传给信号的参数
void signal_handler_signal(signal_handler_t* handler, const char* signal, calldata_t* params);
相关文章
|
6月前
|
Go
浅谈Golang广播sync.Cond
浅谈Golang广播sync.Cond
103 0
[记录]Obs源码分析《一》obs编译
[记录]Obs源码分析《一》obs编译
155 0
|
内存技术
Egret的TimerEvent.TIMER和Event.ENTER_FRAME的区别
Egret的TimerEvent.TIMER和Event.ENTER_FRAME的区别
72 0
|
存储 固态存储 Linux
深入学习tombstone和signal
深入学习tombstone和signal
深入学习tombstone和signal
|
移动开发 JavaScript 前端开发
Event Loop 事件循环简介
Event Loop 事件循环简介
150 0
|
安全 Go 数据安全/隐私保护
Go context 原理(channel广播机制 + mutex线程安全)
Go context 原理(channel广播机制 + mutex线程安全)
425 0
|
物联网 Linux 开发者
signal 函数1|学习笔记
快速学习 signal 函数1
signal 函数1|学习笔记
|
物联网 Linux C语言
Wait 函数|学习笔记
快速学习 Wait 函数
Wait 函数|学习笔记
|
Java 测试技术 调度
java之wait()、join()、sleep() 和 yield() 函数超全详细分析
目录前言1. wait()2. join()3. 共同点与区分度 前言 之前没怎么关注到这两个的区别以及源码探讨 后面被某个公司面试问到了,开始查漏补缺 1. wait() 使当前线程等待,直到它被唤醒,通常是通过被通知或被中断,或者直到经过一定的实时时间。 本身属于一个Object 类,查看源代码也可知:public class Object { 查看其源码可知,一共有三个重载的方法,详情源代码如下: //第一个重载函数 public final void wait() throws Interrupte
201 0
|
XML 移动开发 数据格式
netty系列之:内置的Frame detection
netty系列之:内置的Frame detection