美文网首页WebRTC
WebRTC信号和槽机制

WebRTC信号和槽机制

作者: cx7 | 来源:发表于2019-03-26 22:53 被阅读39次

信号和槽的实现原理大致是这样的 :


image.png

信号对象持有连接,连接里记录了槽对象的地址和槽函数(某个成员函数)地址
信号对象发出信号,实质上是查询了连接以后 调用槽对象的槽函数并传入参数

WebRTC sigslot实现

WebRTC的信号和槽实现非常精简,代码位置(src/rtc_base/sigslot.h,src/rtc_base/sigslot.cc)
详细的代码分析可以看这个bloghttps://www.jianshu.com/p/4e5b8c1a05eb

原代码有约600行 我这里给出一个简约的实现 原理和webrtc的信号槽类似
都是保存目标对象和槽函数,参数通过模板传入.

#ifndef test_hpp
#define test_hpp

#include <stdio.h>
#include <iostream>
#include <thread>
#include <functional>

using namespace std;

//模拟槽函数
class has_slot {
    public:
    void test() {
        cout << "test : no param" << endl;
    }

    void test2(int a) {
        cout << "test2 : one param " << a << endl;
    }
    
    void test3(int a, int b) {
        cout << "test3 : two param " << a << " " << b << endl;
    }
};

class signal_base {
public:
    signal_base() {
        memset(pmethod, 0, sizeof(pmethod));
    }
    
    //连接信号和槽 拷贝成员函数到数组保存(保存的是成员函数的地址)
    template <typename T, typename... Args>
    void copy(T* p, void(T::*pm)(Args...)) {
        typedef void(T::*pm_t)(Args...);
        memcpy(pmethod, &pm, sizeof(pm_t));
    }
    
    //发送信号给槽
    template <typename... Args>
    void call(Args... args) {
        typedef void(has_slot::*pm_t)(Args...);
        
        pm_t pm;
        memcpy(&pm, pmethod, sizeof(pm_t));
        (static_cast<has_slot*>(dest)->*(pm))(args...);
    }
    
private:
    unsigned char pmethod[16];
    has_slot *dest;
};

#endif /* test_hpp */

相关文章

  • WebRTC信号和槽机制

    信号和槽的实现原理大致是这样的 : 信号对象持有连接,连接里记录了槽对象的地址和槽函数(某个成员函数)地址信号对象...

  • WebRTC的Signal机制

    WebRTC中大量使用信号与槽的机制,主要的类如下: 1.has_slots包含有一个Signal的集合,它主要有...

  • Qt学习笔记(四)事件处理机制

    1、信号和槽 Qt中的事件处理机制叫“信号和槽”,signal和slot。模型:对象a中有一个信号signal:X...

  • webrtc之signal机制

    webrtc中大量使用信号与槽的机制,主要的类如下: has_slots包含有一个signal的集合,他主要有两个...

  • Qt信号槽(signal and slot)机制初识

    写在前面 本文主要介绍Qt信号槽(signal and slot)机制,介绍Qt信号槽机制的含义,用途以及如何简单...

  • signal and slot

    信号与槽,是Qt的核心机制,pyqt 是python对Qt的完全封装,因此,信号与槽也是pyqt的核心机制。 通...

  • Python Qt GUI设计:信号与槽的使用方法(基础篇—7)

    1、信号与槽的概念 信号(signal)和槽(slot)是Qt的核心机制,也是在PyQt编程中对象之间进行通信的机...

  • pyqt5——事件和信号

    事件和信号 事件 signals and slots 被其他人翻译成信号和槽机制,(⊙o⊙)…我这里还是不翻译好了...

  • PyQt的信号和槽机制

    信号和槽(Signals and Slots) Qt库第一个认识到在几乎所有情况下,程序员不需要或甚至不想知道所有...

  • 信号与槽

    在Qt Designer中设置信号与槽 信号(signal) 槽(slot) 是Qt的核心机制,也是PyQt的核心...

网友评论

    本文标题:WebRTC信号和槽机制

    本文链接:https://www.haomeiwen.com/subject/sxztvqtx.html