Browse Source
Create a scheduler thread for lightweight tasks
pull/145/head
Gavin Andresen
9 years ago
No known key found for this signature in database
GPG Key ID: 7588242FBE38D3A8
4 changed files with
14 additions and
4 deletions
-
src/bitcoind.cpp
-
src/init.cpp
-
src/init.h
-
src/qt/bitcoin.cpp
|
|
@ -8,6 +8,7 @@ |
|
|
|
#include "init.h" |
|
|
|
#include "main.h" |
|
|
|
#include "noui.h" |
|
|
|
#include "scheduler.h" |
|
|
|
#include "util.h" |
|
|
|
|
|
|
|
#include <boost/algorithm/string/predicate.hpp> |
|
|
@ -55,6 +56,7 @@ void WaitForShutdown(boost::thread_group* threadGroup) |
|
|
|
bool AppInit(int argc, char* argv[]) |
|
|
|
{ |
|
|
|
boost::thread_group threadGroup; |
|
|
|
CScheduler scheduler; |
|
|
|
|
|
|
|
bool fRet = false; |
|
|
|
|
|
|
@ -142,7 +144,7 @@ bool AppInit(int argc, char* argv[]) |
|
|
|
#endif |
|
|
|
SoftSetBoolArg("-server", true); |
|
|
|
|
|
|
|
fRet = AppInit2(threadGroup); |
|
|
|
fRet = AppInit2(threadGroup, scheduler); |
|
|
|
} |
|
|
|
catch (const std::exception& e) { |
|
|
|
PrintExceptionContinue(&e, "AppInit()"); |
|
|
|
|
|
@ -19,6 +19,7 @@ |
|
|
|
#include "net.h" |
|
|
|
#include "rpcserver.h" |
|
|
|
#include "script/standard.h" |
|
|
|
#include "scheduler.h" |
|
|
|
#include "txdb.h" |
|
|
|
#include "ui_interface.h" |
|
|
|
#include "util.h" |
|
|
@ -564,7 +565,7 @@ bool InitSanityCheck(void) |
|
|
|
/** Initialize bitcoin.
|
|
|
|
* @pre Parameters should be parsed and config file should be read. |
|
|
|
*/ |
|
|
|
bool AppInit2(boost::thread_group& threadGroup) |
|
|
|
bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) |
|
|
|
{ |
|
|
|
// ********************************************************* Step 1: setup
|
|
|
|
#ifdef _MSC_VER |
|
|
@ -890,6 +891,10 @@ bool AppInit2(boost::thread_group& threadGroup) |
|
|
|
threadGroup.create_thread(&ThreadScriptCheck); |
|
|
|
} |
|
|
|
|
|
|
|
// Start the lightweight task scheduler thread
|
|
|
|
CScheduler::Function serviceLoop = boost::bind(&CScheduler::serviceQueue, &scheduler); |
|
|
|
threadGroup.create_thread(boost::bind(&TraceThread<CScheduler::Function>, "scheduler", serviceLoop)); |
|
|
|
|
|
|
|
/* Start the RPC server already. It will be started in "warmup" mode
|
|
|
|
* and not really process calls already (but it will signify connections |
|
|
|
* that the server is there and will be ready later). Warmup mode will |
|
|
|
|
|
@ -8,6 +8,7 @@ |
|
|
|
|
|
|
|
#include <string> |
|
|
|
|
|
|
|
class CScheduler; |
|
|
|
class CWallet; |
|
|
|
|
|
|
|
namespace boost |
|
|
@ -20,7 +21,7 @@ extern CWallet* pwalletMain; |
|
|
|
void StartShutdown(); |
|
|
|
bool ShutdownRequested(); |
|
|
|
void Shutdown(); |
|
|
|
bool AppInit2(boost::thread_group& threadGroup); |
|
|
|
bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler); |
|
|
|
|
|
|
|
/** The help message mode determines what help message to show */ |
|
|
|
enum HelpMessageMode { |
|
|
|
|
|
@ -26,6 +26,7 @@ |
|
|
|
#include "init.h" |
|
|
|
#include "main.h" |
|
|
|
#include "rpcserver.h" |
|
|
|
#include "scheduler.h" |
|
|
|
#include "ui_interface.h" |
|
|
|
#include "util.h" |
|
|
|
|
|
|
@ -178,6 +179,7 @@ signals: |
|
|
|
|
|
|
|
private: |
|
|
|
boost::thread_group threadGroup; |
|
|
|
CScheduler scheduler; |
|
|
|
|
|
|
|
/// Pass fatal exception message to UI thread
|
|
|
|
void handleRunawayException(const std::exception *e); |
|
|
@ -258,7 +260,7 @@ void BitcoinCore::initialize() |
|
|
|
try |
|
|
|
{ |
|
|
|
qDebug() << __func__ << ": Running AppInit2 in thread"; |
|
|
|
int rv = AppInit2(threadGroup); |
|
|
|
int rv = AppInit2(threadGroup, scheduler); |
|
|
|
if(rv) |
|
|
|
{ |
|
|
|
/* Start a dummy RPC thread if no RPC thread is active yet
|
|
|
|