diff --git a/cli-miner.cpp b/cli-miner.cpp index 051a00f..252d888 100644 --- a/cli-miner.cpp +++ b/cli-miner.cpp @@ -140,7 +140,7 @@ int main(int argc, char *argv[]) if(strlen(jconf::inst()->GetOutputFile()) != 0) printer::inst()->open_logfile(jconf::inst()->GetOutputFile()); - executor::inst()->ex_start(); + executor::inst()->ex_start(jconf::inst()->DaemonMode()); using namespace std::chrono; uint64_t lastTime = time_point_cast(high_resolution_clock::now()).time_since_epoch().count(); diff --git a/config.txt b/config.txt index 0d6e254..89ccc7b 100644 --- a/config.txt +++ b/config.txt @@ -87,6 +87,14 @@ */ "h_print_time" : 60, +/* + * Daemon mode + * + * If you are running the process in the background and you don't need the keyboard reports, set this to true. + * This should solve the hashrate problems on some emulated terminals. + */ +"daemon_mode" : false, + /* * Output file * diff --git a/executor.cpp b/executor.cpp index 6d35f1b..149725e 100644 --- a/executor.cpp +++ b/executor.cpp @@ -49,7 +49,6 @@ executor* executor::oInst = NULL; executor::executor() { - my_thd = nullptr; cpu_ctx = (cryptonight_ctx*)_mm_malloc(sizeof(cryptonight_ctx), 4096); } diff --git a/executor.h b/executor.h index a6c3444..e93a5b4 100644 --- a/executor.h +++ b/executor.h @@ -21,8 +21,7 @@ public: return oInst; }; - void ex_start() { my_thd = new std::thread(&executor::ex_main, this); } - void ex_main(); + void ex_start(bool daemon) { daemon ? ex_main() : std::thread(&executor::ex_main, this).detach(); } void get_http_report(ex_event_name ev_id, std::string& data); @@ -57,7 +56,6 @@ private: telemetry* telem; std::vector* pvThreads; - std::thread* my_thd; size_t current_pool_id; @@ -71,6 +69,8 @@ private: executor(); static executor* oInst; + void ex_main(); + void ex_clock_thd(); void pool_connect(jpsock* pool); diff --git a/jconf.cpp b/jconf.cpp index 9777abe..cae79eb 100644 --- a/jconf.cpp +++ b/jconf.cpp @@ -48,7 +48,7 @@ using namespace rapidjson; enum configEnum { iGpuThreadNum, aGpuThreadsConf, iPlatformIdx, bTlsMode, bTlsSecureAlgo, sTlsFingerprint, sPoolAddr, sWalletAddr, sPoolPwd, iCallTimeout, iNetRetry, iGiveUpLimit, iVerboseLevel, iAutohashTime, - sOutputFile, iHttpdPort, bPreferIpv4 }; + bDaemonMode, sOutputFile, iHttpdPort, bPreferIpv4 }; struct configVal { configEnum iName; @@ -72,6 +72,7 @@ configVal oConfigValues[] = { { iGiveUpLimit, "giveup_limit", kNumberType }, { iVerboseLevel, "verbose_level", kNumberType }, { iAutohashTime, "h_print_time", kNumberType }, + { bDaemonMode, "daemon_mode", kTrueType }, { sOutputFile, "output_file", kStringType }, { iHttpdPort, "httpd_port", kNumberType }, { bPreferIpv4, "prefer_ipv4", kTrueType } @@ -220,6 +221,11 @@ uint16_t jconf::GetHttpdPort() return prv->configValues[iHttpdPort]->GetUint(); } +bool jconf::DaemonMode() +{ + return prv->configValues[bDaemonMode]->GetBool(); +} + const char* jconf::GetOutputFile() { return prv->configValues[sOutputFile]->GetString(); diff --git a/jconf.h b/jconf.h index 51af4d2..36ef0de 100644 --- a/jconf.h +++ b/jconf.h @@ -44,6 +44,8 @@ public: uint16_t GetHttpdPort(); + bool DaemonMode(); + bool PreferIpv4(); inline bool HaveHardwareAes() { return bHaveAes; }