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编译
293 0
关于 qml程序在目标机上开发时运行出现不断闪屏现象的 解决方法
关于 qml程序在目标机上开发时运行出现不断闪屏现象的 解决方法
关于 qml程序在目标机上开发时运行出现不断闪屏现象的 解决方法
|
云安全 安全
阿里云服务器25端口解封教程完美解决25端口开通问题
阿里云服务器25端口如何申请解封?默认阿里云25端口是封禁的,一般建议使用465端口代替,但是也可以申请解封25端口,阿小云来详细说下阿里云服务器25端口解封教程
10481 0
 阿里云服务器25端口解封教程完美解决25端口开通问题
|
移动开发 前端开发 JavaScript
JS配合canvas实现贪吃蛇小游戏_升级_丝滑版本_支持PC端和移动端
本文介绍了一个使用JavaScript和HTML5 Canvas API实现的贪吃蛇游戏的升级版本,该版本支持PC端和移动端,提供了丝滑的转向效果,并允许玩家通过键盘或触摸屏控制蛇的移动。代码中包含了详细的注释,解释了游戏逻辑、食物生成、得分机制以及如何响应不同的输入设备。
371 1
JS配合canvas实现贪吃蛇小游戏_升级_丝滑版本_支持PC端和移动端
|
关系型数据库 MySQL 数据库
MYSQL索引的分类与创建语法详解
理解并合理应用这些索引类型,能够有效提高MySQL数据库的性能和查询效率。每种索引类型都有其特定的优势,适当地使用它们可以为数据库操作带来显著的性能提升。
504 3
|
编解码 索引
HTTP-FLV详解及分析(三)
HTTP-FLV详解及分析
371 0
|
Kubernetes Linux UED
在Linux中,什么是滚动更新和静态更新?
在Linux中,什么是滚动更新和静态更新?
|
小程序
开发小程序只要几百块?
开发小程序只要几百块?
1408 0
|
Java 程序员 Windows
[笔记]Windows核心编程《十一》Windows线程池
[笔记]Windows核心编程《十一》Windows线程池
36939 4
[笔记]Windows核心编程《十一》Windows线程池

热门文章

最新文章