webRTC base模块SigSlot信号与槽实现

SigSlot

非常经典的信号/槽结构 在Qt中同样存在信号/槽机制用于通讯

Qt下信号/槽

QT signal/slot http://blog.csdn.net/qq_21358401/article/details/78736796

SigSlot的应用

SigSlot的构成比较复杂但应用非常简单 所以这里先分析其用法
总结起来就两点

以两参数的signal2为例
1. 利用
   sigslot::signal2<string,string> signal_;
   string str1, str2;    
   利用既定的信号模板 指定要通过信号发送的数据类型
   并在要发送信号时 signal_(str1, str2);
2. 接收类需要继承 class test : public sigslot::has_slots<> {
                    void recv(string msg1, string msg2) {
                        cout << "rcv 1:" << msg1 << "rcv 2:" << msg2 << endl;
                    }
                }

非常简单的调用 和Qt中的信号与槽并无区别

完整示例代码

#include <iostream>
#include <queue>
#include <memory>
#include <string>
#include <csignal>
#include "pthread.h"

#include "webrtc/base/sigslot.h"

using namespace std;

class sender {
public:
    sigslot::signal2<string, char *> signal_;
    char str[20];
    char a;
    void send() {
        static int val = 0;
        snprintf(str, 20, "%s", "sliver.chen");
        printf("my address is 0x%x\n", &a);
        signal_(this->str, &a);
    }
};

class recver : public sigslot::has_slots<> {
public:
    void OnDanger(string msg, char *p) {
        cout << msg << endl;
        printf("addr:%x\n", p);
    }
};

int main(int argc, char **argv) {
    int ret = 0;
    sender s;
    recver r;

    s.signal_.connect(&r, &recver::OnDanger);

    int i = 0;
    while (i++ < 10) {
        s.send();
    }

    return 0;
}

示例代码还验证了一个规则:信号与槽发送的数据是拷贝的 故而如果想要传递数据 可以通过传递数据的指针来实现.

参考代码git地址:

sigslot 参考代码 https://github.com/sliver-chen/webRTCTutorial/blob/master/SigSlot/SigSlot.cpp

SigSlot的实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值