关于信号和槽有一个非常精炼的C++实现,作者是Sarah Thompson,该实现只有一个头文件sigslot.h,跨平台且线程安全。

源码在:http://sigslot.cvs.sourceforge.net/viewvc/sigslot/sigslot/sigslot.h?revision=1.1.1.1&content-type=text%2Fplain

在WebRTC中,sigslot .h是其基础的事件处理框架, 在多个模块的消息通知,响应处理中被使用。

sigslot.h的使用方法如下所示:

  1. #include "sigslot.h"
  2. #include <string>
  3. #include <stdio.h>
  4. #include <iostream>
  5. #include <windows.h>
  6. using namespace sigslot;
  7. using namespace std;
  8. class CSender
  9. {
  10. public:
  11. sigslot::signal2<string, int> m_pfnsigDanger;
  12. void Panic()
  13. {
  14. static int nVal = 0;
  15. char szVal[20] = { 0 };
  16. sprintf_s(szVal,20, "help--%d", nVal);
  17. m_pfnsigDanger(szVal, nVal++);
  18. }
  19. };
  20. class CReceiver :public sigslot::has_slots<>
  21. {
  22. public:
  23. void OnDanger(string strMsg, int nVal)
  24. {
  25. //printf("%s ==> %d", strMsg.c_str(), nVal);
  26. cout << strMsg.c_str() << " ==> " << nVal << endl;
  27. }
  28. };
  29. int main()
  30. {
  31. CSender sender;
  32. CReceiver recever;
  33. cout << "create object ok..." << endl;
  34. sender.m_pfnsigDanger.connect(&recever, &CReceiver::OnDanger);
  35. cout << "connect succ!" << endl;
  36. while (1)
  37. {
  38. cout << "in while..." << endl;
  39. sender.Panic();
  40. Sleep(2000);
  41. cout << "end of sleep" << endl;
  42. }
  43. return 0;
  44. }

需要注意的是,如果在Qt工程中使用sigslot.h,sigslot.h中的emit函数名会和Qt中的emit宏冲突,修改方法有两个,一是将sigslot.h的emit改成其他名字,二是在.pro文件中添加DEFINES+=QT_NO_EMIT,禁用Qt的emit宏。

参考链接:http://blog.csdn.net/u014338577/article/details/47127405

http://blog.csdn.net/caoshangpa/article/details/54088313

信号和槽有一个非常精炼的C++实现,作者是Sarah Thompson,该实现只有一个头文件sigslot.h,跨平台且线程安全的更多相关文章

  1. 在Qt Creator 和在 vs2012 里添加信号和槽

    原文地址:http://www.cnblogs.com/li-peng/p/3644812.html 作者:李鹏 出处:http://www.cnblogs.com/li-peng/ 本文版权归作者和 ...

  2. QT 的信号与槽

    转载: QT 的信号与槽机制介绍 QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 ...

  3. QT的信号与槽机制介绍

      信号与槽作为QT的核心机制在QT编程中有着广泛的应用,本文介绍了信号与槽的一些基本概念.元对象工具以及在实际使用过程中应注意的一些问题. QT是一个跨平台的C++ GUI应用构架,它提供了丰富的窗 ...

  4. Qt入门(3)——信号和槽

    信号和槽用于对象间的通讯.信号/槽机制是Qt的一个中心特征并且也许是Qt与其它工具包的最不相同的部分.在图形用户界面编程中,我们经常希望一个窗口部件的一个变化被通知给另一个窗口部件.更一般地,我们希望 ...

  5. Qt 的信号与槽机制介绍(10个要注意的问题)

    QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...

  6. 【qt】QT 的信号与槽机制

    QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...

  7. QT的信号和槽机制简介

    信号与槽作为QT的核心机制在QT编程中有着广泛的应用,本文介绍了信号与槽的一些基本概念.元对象工具以及在实际使用过程中应注意的一些问题. QT是一个跨平台的C++ GUI应用构架,它提供了丰富的窗口部 ...

  8. 03Qt信号与槽(2)

    1. 元对象工具 ​ 元对象编译器 MOC(meta object compiler)对 C++ 文件中的类声明进行分析并产生用于初始化元对象的 C++ 代码,元对象包含全部信号和槽的名字及指向这些函 ...

  9. Qt 信号和槽异常: QObject::connect: No Such slot baseClassName::subClassfunction() in ......

    2019-08-14起笔 小熊的情况描述: 父类A继承自QWidget,所以父类A自动添加了Q_OBJECT.  子类B继承自父类A,子类B没有添加Q_OBJECT.在子类B中给动态创建的控件添加事件 ...

随机推荐

  1. 深搜基础题目 杭电 HDU 1241

    HDU 1241 是深搜算法的入门题目,递归实现. 原题目传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1241 代码仅供参考,c++实现: #incl ...

  2. c++的getline()和get()函数

    这两个函数都是面向行的输入: getline()函数读取整行,它使用通过回车符来确定输入结尾.要调用这种方法,可以使用cin.getline().该函数有两个参数, 第一个参数用来存储输入行的数组的名 ...

  3. C# 封装 System.Data.SQLite

    参考1: 关于如何使用System.Data.SQLite的入门: http://www.dreamincode.net/forums/topic/157830-using-sqlite-with-c ...

  4. Java log4j的环境搭建

    一.Log4j是什么? Log4j是Apache的一个开源代码项目,通过使用Log4j,我们可以控制日志信息输出的目的地.最常见的就是输出到控制台或者日志文件.同时,它强大的一点是可以在C.C++等其 ...

  5. PHP zip压缩文件及解压

    PHP zip压缩文件及解压 利用ZipArchive 类实现 只有有函数.界面大家自己写 ZipArchive(PHP 5.3 + 已自带不需要安装dll) /** * 文件解压 * @param ...

  6. MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在

    问题描述:在用vs生成MVC时若使用Internet应用程序为模版,项目建好后重新编译下无法通过,弹出错误: 解决方案:问题出来后,询问了身边很多人都是一头雾水,于是乎各种谷歌和百度,还好功夫不负有心 ...

  7. The solution for "Eclipse is running in a JRE, but a JDK is required"

    Open the eclipse folder and access the eclipse.ini file:   Before change it ,you will find it don’t ...

  8. 又优化了一下 Android ListView 异步加载图片

    写这篇文章并不是教大家怎么样用listview异步加载图片,因为这样的文章在网上已经有很多了,比如这位仁兄写的就很好: http://www.iteye.com/topic/685986 我也是因为看 ...

  9. java代码收藏:获取HttpServletRequest中某一前缀的参数

    public static Map getParametersStartingWith(ServletRequest request, String prefix) { Enumeration par ...

  10. MultiByteToWideChar和WideCharToMultiByte用法详解, ANSI和UNICODE之间的转换

    //========================================================================//TITLE://    MultiByteToW ...