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);
相关文章
[记录]Obs源码分析《一》obs编译
[记录]Obs源码分析《一》obs编译
157 0
|
5月前
|
调度 PHP
Swoole 源码分析之 Channel 通道模块
通道,用于协程间通讯,支持多生产者协程和多消费者协程。底层自动实现了协程的切换和调度。通道与 PHP 的 Array 类似,仅占用内存,没有其他额外的资源申请,所有操作均为内存操作,无 IO 消耗。
111 5
Swoole 源码分析之 Channel 通道模块
|
存储 固态存储 Linux
深入学习tombstone和signal
深入学习tombstone和signal
深入学习tombstone和signal
|
安全 Go 数据安全/隐私保护
Go context 原理(channel广播机制 + mutex线程安全)
Go context 原理(channel广播机制 + mutex线程安全)
428 0
|
物联网 Linux 开发者
signal 函数1|学习笔记
快速学习 signal 函数1
signal 函数1|学习笔记
|
物联网 Linux C语言
Wait 函数|学习笔记
快速学习 Wait 函数
Wait 函数|学习笔记
|
图形学
Unity【Timeline】- 使用Signal Track添加事件
Unity【Timeline】- 使用Signal Track添加事件
1286 0
Unity【Timeline】- 使用Signal Track添加事件
GCD全解-dispatch_barrier_sync/async-栅栏函数
GCD全解-dispatch_barrier_sync/async-栅栏函数
281 0
|
XML 移动开发 数据格式
netty系列之:内置的Frame detection
netty系列之:内置的Frame detection
|
开发者
Swoole v4.7 版本新特性预览之 Process\Pool::detach()
Process\Pool 是 Swoole 提供的进程池,基于 Server 的 Manager 管理进程模块实现,可管理多个工作进程。
162 0