比特币源码分析5

2019-07-20  本文已影响0人  nit小星星

专门看一个类CMainSignals

public:

    /** Register a CScheduler to give callbacks which should run in the background (may only be called once) */

    void RegisterBackgroundSignalScheduler(CScheduler& scheduler);

    /** Unregister a CScheduler to give callbacks which should run in the background - these callbacks will now be dropped! */

    void UnregisterBackgroundSignalScheduler();

    /** Call any remaining callbacks on the calling thread */

    void FlushBackgroundCallbacks();

    size_t CallbacksPending();

    /** Register with mempool to call TransactionRemovedFromMempool callbacks */

    void RegisterWithMempoolSignals(CTxMemPool& pool);

    /** Unregister with mempool */

    void UnregisterWithMempoolSignals(CTxMemPool& pool);

    void UpdatedBlockTip(const CBlockIndex *, const CBlockIndex *, bool fInitialDownload);

    void TransactionAddedToMempool(const CTransactionRef &);

    void BlockConnected(const std::shared_ptr<const CBlock> &, const CBlockIndex *pindex, const std::shared_ptr<const std::vector<CTransactionRef>> &);

    void BlockDisconnected(const std::shared_ptr<const CBlock> &);

    void ChainStateFlushed(const CBlockLocator &);

    void BlockChecked(const CBlock&, const CValidationState&);

    void NewPoWValidBlock(const CBlockIndex *, const std::shared_ptr<const CBlock>&);

这个类里面有许多注册函数:
当然我们可以选择一个注册函数往里看,

void RegisterBackgroundSignalScheduler(CScheduler& scheduler);就这个吧。

他生成了一个struct MainSignalsInstance 实例

这个结构体下边

boost::signals2::signal<void (const CBlockIndex *, const CBlockIndex *, bool fInitialDownload)> UpdatedBlockTip;

    boost::signals2::signal<void (const CTransactionRef &)> TransactionAddedToMempool;

    boost::signals2::signal<void (const std::shared_ptr<const CBlock> &, const CBlockIndex *pindex, const std::vector<CTransactionRef>&)> BlockConnected;

    boost::signals2::signal<void (const std::shared_ptr<const CBlock> &)> BlockDisconnected;

    boost::signals2::signal<void (const CTransactionRef &)> TransactionRemovedFromMempool;

    boost::signals2::signal<void (const CBlockLocator &)> ChainStateFlushed;

    boost::signals2::signal<void (const CBlock&, const CValidationState&)> BlockChecked;

    boost::signals2::signal<void (const CBlockIndex *, const std::shared_ptr<const CBlock>&)> NewPoWValidBlock;

定义了一些信号。这又是传统的信号槽机制。一旦触发信号,所有关联的函数都会被调用

上一篇下一篇

猜你喜欢

热点阅读