Boost 的事件管理架構:Signal / Slot(上)
来源:互联网 发布:商家给淘宝开具什么发 编辑:程序博客网 时间:2024/06/07 03:26
有 Signals2 就代表有 Signals1(官方頁面),Boost 裡的這兩個函式庫基本上要做的事情是一樣的,不同的地方在於 Signals2 是設計成 thread-safe 的,而且也做了一定程度的自動連線管理,理論上在使用上會比較方便、安全,所以 Heresy 在這邊就僅就 Signals2 來做介紹了。
概念
Signals2 這個函式庫,是採用 signals / slots 的概念(最早應該是 Qt 所提出來的,參考維基百科),來實作一個 publisher、或稱事件(event)系統,也類似所謂的「委派」(delegates)的概念,功能比一般的 callback function 強了不少。
Signals / slots 這種系統的基本概念,基本上就是每一個 signal 可以連接(connect)一個、或多個 slot,而當程式發送(emit)這個 signal 的時候,所有連接到這個 signal 的 slot,就都會被呼叫並執行。
這樣設計的好處,是在於在這些 signal 和 slot 的連結,可以在 runtime 時建立,而非寫死在程式中;所以程式在編寫時,也不必去管到底他要呼叫多少、那些東西,只要去發送 signal 就好了。而這個 signal 連結到多少 slot,在程式內部也都不需要去在乎,除了可以將程式內的模組進一步切割、減少直接使用,也算是相當有彈性的寫法。
基本使用
而 Boost 的 signals2 要怎麼使用呢?有興趣的人可以直接去看 Boost 提供的教學網頁,裡面有各種狀況下的使用方法,而在範例的頁面,也有提供了數個範例程式,可以作為參考。Heresy 在這邊,則是就 Heresy 自己覺得應該比較用的到的部分,做一些簡單的說明。
首先,先來個最簡單的範例程式:
// include STL headers#include <stdlib.h>#include <iostream> // include Boost header#include <boost/signals2/signal.hpp> // slot functionvoid slotTest1( int a ){ std::cout << "Test1 get " << a << std::endl;} void slotTest2( int a ){ std::cout << "Test2 get " << a << std::endl;} int main( int argc, char** argv ){ // create a signal boost::signals2::signal<void (int)> mSignal1; // connect signal and slot mSignal1.connect( slotTest1 ); mSignal1.connect( slotTest2 ); // emit signal mSignal1( 10 ); return 0;}
http://kheresy.wordpress.com/2011/04/07/boost_signals_part1/
- Boost 的事件管理架構:Signal / Slot(上)
- Boost 的事件管理架構:Signal / Slot(上)
- Boost 的事件管理架構:Signal / Slot(中)
- Boost 的事件管理架構:Signal / Slot(下)
- Boost 的事件管理架構:Signal / Slot
- boost--signal--slot笔记
- 利用boost.signal模仿Qt的Signal-slot
- QT中的signal/slot的事件
- CTK 事件管理机制(signal/slot)
- 深入理解QT的SIGNAL\SLOT机制(一):SIGNAL\SLOT如何使用
- signal和slot的权限
- Signal和Slot的粘合剂
- Qt的slot和signal
- Signal & Slot
- PyQt5学习教程11:几种signal与slot处理事件的方法
- QT的signal和slot的理解
- Qt的Signal和Slot机制(一)
- Qt的Signal和Slot机制(二)
- Android安装包APK文件的XML解码
- 浅谈 Office 2013 App
- Openfiler应用篇(一)iSCSI
- Android adb(Android Debug Bridge)常用命令
- 浅析PageRank算法
- Boost 的事件管理架構:Signal / Slot(上)
- Apache Qpid深入介绍
- arm开发问题
- Linux使用笔记: 设置Samba服务器中新建文件/目录的权限
- 扩展欧几里德算法
- 阿里云UBUNTU 12下安装LAMP
- 3dsmax操作技巧(持续更新中)
- 文本相似度计算
- gdb print打印数组中任意数值