美文网首页
比特币源码分析5

比特币源码分析5

作者: nit小星星 | 来源:发表于2019-07-20 13:13 被阅读0次

    专门看一个类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;

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

    相关文章

      网友评论

          本文标题:比特币源码分析5

          本文链接:https://www.haomeiwen.com/subject/dalrlctx.html