比特币源码解析二——准备知识——Boost

in bitcoin •  7 years ago 

Boost是一个开源、跨平台、功能强大的C++库,下面学习bitcoin源码中主要用到的一些类。

官方文档: http://www.boost.org/doc/libs/1_65_0/ 

每个类都包含强大的功能,先大概看过,第二遍再详细学习

Signals2

这部分的学习主要参考: http://blog.csdn.net/zengraoli/article/details/9697841                                                                以及:http://blog.csdn.net/wuzhekai1985/article/details/6674984

signals2是基于Boost的另一个库Signals,实现了线程安全的观察者模式。观察者模式是指:定义对象间的一种一对多的依赖关系,当一个对象发生改变的时候,所有依赖于它的对象都将得到通知并更新。android中很多地方也用到了观察者模式。

在signals2库中,观察者模式又被称为信号/插槽,也非常形象,官方文档的解释如下:

 The Boost.Signals2 library is an implementation of a managed signals and slots system. Signals represent callbacks with multiple targets, and are also called publishers or events in similar systems. Signals are connected to some set of slots, which are callback receivers (also called event targets or subscribers), which are called when the signal is “emitted.”                                                                    Boost.Signals2库是一个改善的信号/插槽系统的实现。信号在类似的系统中也被称为发布者或者事件,表示多个回调目标。信号会和多个插槽相连,插槽也就是回调的接收者(也被称为事件目标或者订阅者),当信号发射的时候,所有关联的插槽都会被调用。
Signals and slots are managed, in that signals and slots (or, more properly, objects that occur as part of the slots) can track connections and are capable of automatically disconnecting signal/slot connections when either is destroyed. This enables the user to make signal/slot connections without expending a great effort to manage the lifetimes of those connections with regard to the lifetimes of all objects involved.                                                                                                                                                                                            信号/插槽被设计成能够跟踪连接状态以及在双方任何一个被销毁时自动断开连接。这就使得用户能够方便的使用信号/插槽连接关系,而不用再去管理这种连接关系涉及的所有对象的生命周期。 

其实信号就是一个触发器,插槽就是一些类的回调函数,当触发器被触发的时候,所有回调函数都会被调用。

實例上傳了github(不知道為什麼輸入法變成了繁體的,那就繁體的吧...),這只是Boost的九牛一毛,還需要繼續深入了解。


Bind

這裡參考: http://blog.csdn.net/zengraoli/article/details/9666943 

bind並不是一個單獨的類或者函數,而是非常龐大的家族,依據綁定的參數個數和要綁定的調用對象類型,總共有數十個不同的形式,但它們的名字都叫做bind,編譯器會根據具體的綁定代碼自動確定要使用的正確形式。

bind接受的第一個參數必須是一個可調用對象f,包括函數指針、函數引用、成員函數指針和函數對象,之後bind接受最多9個參數,參數的數量必須與f的參數數量相等,這些參數將被傳遞給f作為形參。

綁定完成後,bind會返回一個函數對象,它內部保存了f的拷貝,具有operator(),返回值類型被自動推導為f的返回值類型。在發生調用時,這個函數對象將把之前存儲的參數轉發給f完成調用。

簡單來說,Bind的功能就是對一個函數綁定某些參數,其中參數有一個很重要的概念叫做佔位符,被定義為從1到9。


Thread

县城,是各种项目中都会用到的一个技术,而一般提到线程都会涉及到多线程,多线程当中最经典的问题就是同步访问共享资源,和其他几乎所有语言一样boost也是通过提高互斥锁来解决的,但是不同的bost提供了多个互斥类,使得项目可以更灵活的处理共享资源。


Chrono

Chrono是Boost库中用于时间处理的库,主要包含三个概念时间段(duration),时间点(time_point)和时钟(clock)。


以上简单的例子已经做了练习并且同步github了


Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in:
http://www.boost.org/doc/libs/1_60_0/doc/html/signals.html