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编译
185 0
|
8月前
|
API 调度 iOS开发
多线程和异步编程:什么是 GCD(Grand Central Dispatch)?如何在 iOS 中使用 GCD?
多线程和异步编程:什么是 GCD(Grand Central Dispatch)?如何在 iOS 中使用 GCD?
98 1
|
内存技术
Egret的TimerEvent.TIMER和Event.ENTER_FRAME的区别
Egret的TimerEvent.TIMER和Event.ENTER_FRAME的区别
86 0
|
存储 固态存储 Linux
深入学习tombstone和signal
深入学习tombstone和signal
深入学习tombstone和signal
|
Unix Linux
C 程序来演示 fork() 和 pipe()
fork() 用于创建子进程。此子进程是原始(父)进程的副本。它是在类Unix操作系统上创建进程的主要方法。
97 0
|
监控
从源码与官方文档看之Handle篇(一)
之前的文章实在太肤浅,写出来其实很多都没有太大帮助,所以我们另起一个系列“从源码与官方文档看”。
125 0
|
物联网 Linux 开发者
signal 函数1|学习笔记
快速学习 signal 函数1
|
图形学
Unity【Timeline】- 使用Signal Track添加事件
Unity【Timeline】- 使用Signal Track添加事件
1350 0
Unity【Timeline】- 使用Signal Track添加事件
|
安全
从源码与官方文档看之Handle篇(三)
我们继续看看源码,来一步步去深入Handle,去熟悉那些我们平时用得到和用不到的属性与特点。结合到我们开发工作中,看看我们取用了它哪些好用的地方。
|
安全
从源码与官方文档看之Handle篇(二)
上一篇我们根据官方注释解读Handle的一些基本属性,这一篇我们接着慢慢阐述。
106 0