区块链研习社比特币源码研读班
今天研读第二,第三流程,SetupEnvironment和noui_connect函数
一总体结构图
二 研读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<bool (const std::string& message, const std::string& caption, unsigned int style), boost::signals2::last_value<bool> > ThreadSafeMessageBox;
static bool noui_ThreadSafeMessageBox(const std::string& message, const std::string& caption, unsigned int style)
{
...
}