diff --git a/CMakeLists.txt b/CMakeLists.txt index c36bca2e59..5262f16819 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,6 +25,7 @@ option(BOOST_USE_SIGNALS2 "Boost use signals2 instead of signals" ON) option(ENABLE_ASAN "Enable Address Sanitizer (Unix Only)" OFF) option(INSTALL_PRIVATE_HEADERS "Install private headers (usually needed for externally built Rime plugins)" OFF) option(ENABLE_EXTERNAL_PLUGINS "Enable loading of externally built Rime plugins (from directory set by RIME_PLUGINS_DIR variable)" OFF) +option(ENABLE_THREADING "Enable threading for deployer" ON) set(RIME_DATA_DIR "${CMAKE_INSTALL_FULL_DATADIR}/rime-data" CACHE STRING "Target directory for Rime data") set(RIME_PLUGINS_DIR "${CMAKE_INSTALL_FULL_LIBDIR}/rime-plugins" CACHE STRING "Target directory for externally built Rime plugins") @@ -97,6 +98,10 @@ endif() find_package(Threads) +if(NOT ENABLE_THREADING) + add_definitions(-DRIME_NO_THREADING) +endif() + if(BUILD_TEST) find_package(GTest REQUIRED) if(GTEST_FOUND) diff --git a/src/rime/deployer.cc b/src/rime/deployer.cc index 1394679b2f..2b2169ca41 100644 --- a/src/rime/deployer.cc +++ b/src/rime/deployer.cc @@ -106,10 +106,15 @@ bool Deployer::StartWork(bool maintenance_mode) { if (pending_tasks_.empty()) { return false; } +#ifdef RIME_NO_THREADING + LOG(INFO) << "running " << pending_tasks_.size() << " tasks in main thread."; + return Run(); +#else LOG(INFO) << "starting work thread for " << pending_tasks_.size() << " tasks."; work_ = std::async(std::launch::async, [this] { Run(); }); return work_.valid(); +#endif } bool Deployer::StartMaintenance() {