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);
相关文章
|
PHP
swoole,swoole_timer_tick() must be callable, array given 报错异常
easyswoole框架内部交流后也说明这个问题是由于swoole版本变动,很早以前就在新版做了兼容(将intervalCheck改为public方法)
183 0
|
安全 Go 数据安全/隐私保护
Go context 原理(channel广播机制 + mutex线程安全)
Go context 原理(channel广播机制 + mutex线程安全)
420 0
|
JSON 数据格式
Matrix 之 FrameTracer 源码分析
Matrix 之 FrameTracer 源码分析
167 0
|
流计算
四十四、nimbus,supervisor进程自动停止(Read a frame size of ..., which is bigger than the maximum allowable...)
四十四、nimbus,supervisor进程自动停止(Read a frame size of ..., which is bigger than the maximum allowable...)
四十四、nimbus,supervisor进程自动停止(Read a frame size of ..., which is bigger than the maximum allowable...)
|
缓存 安全 算法
Go基础:channel、定时器、select、锁、sync、atomic
Go基础:channel、定时器、select、锁、sync、atomic
311 0
Go基础:channel、定时器、select、锁、sync、atomic
|
XML 移动开发 数据格式
netty系列之:内置的Frame detection
netty系列之:内置的Frame detection
|
开发者
Swoole v4.7 版本新特性预览之 Process\Pool::detach()
Process\Pool 是 Swoole 提供的进程池,基于 Server 的 Manager 管理进程模块实现,可管理多个工作进程。
158 0
|
存储 JavaScript 安全
sync.Map源码分析
众所周知,go普通的map是不支持并发的,换而言之,不是线程(goroutine)安全的。博主是从golang 1.4开始使用的,那时候map的并发读是没有支持,但是并发写会出现脏数据。
1109 3
sync.Map源码分析