比特币源码研读(5)-main函数(4)steemCreated with Sketch.

in #btc7 years ago

AppInit()函数

App初始化函数

上一次,我们研究到了

boost::thread_group threadGroup;

CScheduler scheduler;
下面继续看:

1.png

从注释开看,该函数是在解析设置的参数或者是配置文件的。

1)先看gArgs变量,定义在bitcoind.cpp文件中,L93行

2.png

是一个ArgsManager类变量,这个类定义在util.h中,实现在util.cpp中。其中的函数,我们用到的时候再做分析

2)再看其中的函数ParseParameters函数

ParseParameters函数是类ArgsManager中定义的一个函数

3.png

第388行代码:LOCK(cs_args);字面意思,锁存变量cs_args.那如何实现的呢?

先看变量cs_args

4.png

其定义是

mutable CCriticalSection cs_args;
类CCriticalSection的对象表示一个“临界区”,它是一个用于同步的对象,同一时刻只允许一个线程存取资源或代码区。

再看LOCK(cs),在src/sync.h文件中定义

5.png

LOCK是一个宏定义,定义内容

#define LOCK(cs) CCriticalBlockPASTE2(criticalblock, COUNTER)(cs, #cs, FILE, LINE)
LOCK(cs_args)即保证在该代码后面的全局变量在程序运行过程中不会被其他线程对其后的变量进行篡改

接着看第389,390行代码

6.png

程序利用mapArgs,mapMultiArgs传递参数,mapArgs存储单个值,mapMultiArgs存储多个值。

7.png

389,390行是利用clear函数清空空间。

再看下面的for循环

8.png

for循环是解析输入参数。

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

区块链研习社比特币源码研读班 electroman

以下是广告:

我们区块链研习社已创建“区块链研习社币圈交流”小密圈”,在小密圈中,我们将带领大家一起学习区块链的原理与投资,还将提供区块链基本原理解答、交易所注册与交易操作、ICO交易与操作、投资分析、风险分析等内容。
区块链研习社币圈交流.png