Create a scheduler thread for lightweight tasks
This commit is contained in:
parent
68d370bec4
commit
ddd0acd3db
4 changed files with 14 additions and 4 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue