比特币源码研读之二

区块链研习社比特币源码研读班
今天研读第二,第三流程,SetupEnvironment和noui_connect函数

一总体结构图

比特币源码研读之二_第1张图片
image.png

二 研读SetupEnvironment,设置运行环境

void SetupEnvironment()
{
#ifdef HAVE_MALLOPT_ARENA_MAX
    //《1 32位系统,设置内存最大分配区域为1,表示系统按CPU进行自动设置
    if (sizeof(void*) == 4) {
        mallopt(M_ARENA_MAX, 1);
    }
#endif

//《2 系统区域设置,影响当前语言编码,日期格式,数字格式等
#if !defined(WIN32) && !defined(MAC_OSX) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
    try {
        std::locale(""); // Raises a runtime error if current locale is invalid
    } catch (const std::runtime_error&) {
        setenv("LC_ALL", "C", 1);
    }
#endif

// 《3 文件系统的本地化设置
    std::locale loc = fs::path::imbue(std::locale::classic());
    fs::path::imbue(loc);
}

三 研读noui_connect,连接信号与槽

void noui_connect()
{
    uiInterface.ThreadSafeMessageBox.connect(noui_ThreadSafeMessageBox);//连接弹出消息框
    uiInterface.ThreadSafeQuestion.connect(noui_ThreadSafeQuestion);//连接问题询问框
    uiInterface.InitMessage.connect(noui_InitMessage);//连接初始化消息
}


《1 uiInterface为比特币的界面对象,属于 CClientUIInterface 类

《 2 信号与槽
//ThreadSafeMessageBox等为boost的信号, 定义见 ui_interface.h
// noui_ThreadSafeMessageBox为槽函数,定义见noui.cpp
//信号和槽机制用于取代函数回调,初见于qt C++框架,后面boost参考思想实现了

 /** Show message box. */
    boost::signals2::signal > ThreadSafeMessageBox;

static bool noui_ThreadSafeMessageBox(const std::string& message, const std::string& caption, unsigned int style)
{
...
}

你可能感兴趣的:(比特币源码研读之二)