diff --git a/CMakeLists.txt b/CMakeLists.txt index 765ef5448d25a53d1bd3d56c9cb2e071eab5842f..b4e6b67b22386444418d8f17d08311de87096c10 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,13 +25,6 @@ include_directories(${PROJECT_SOURCE_DIR}) include_directories(${CMAKE_CURRENT_BINARY_DIR}) include_directories(${PROJECT_SOURCE_DIR}/thirdparty/local/include) -pybind11_add_module(core - ${PROJECT_SOURCE_DIR}/visualdl/backend/logic/pybind.cc - ${PROJECT_SOURCE_DIR}/visualdl/backend/utils/filesystem.h - ${PROJECT_SOURCE_DIR}/visualdl/backend/utils/concurrency.h - ) -target_link_libraries(core PRIVATE pybind11::module im storage sdk protobuf glog) -set_target_properties(core PROPERTIES POSITION_INDEPENDENT_CODE TRUE) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/visualdl/backend/storage) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/visualdl/backend/logic) @@ -39,5 +32,8 @@ add_executable(vl_test ${PROJECT_SOURCE_DIR}/visualdl/backend/test.cc ${PROJECT_SOURCE_DIR}/visualdl/backend/storage/storage_test.cc ${PROJECT_SOURCE_DIR}/visualdl/backend/utils/test_concurrency.cc - ${PROJECT_SOURCE_DIR}/visualdl/backend/logic/im_test.cc) + ${PROJECT_SOURCE_DIR}/visualdl/backend/logic/im_test.cc + ${PROJECT_SOURCE_DIR}/visualdl/backend/utils/concurrency.h + ${PROJECT_SOURCE_DIR}/visualdl/backend/utils/filesystem.h + ) target_link_libraries(vl_test storage im gtest glog protobuf gflags pthread) diff --git a/visualdl/backend/utils/concurrency.h b/visualdl/backend/utils/concurrency.h index f259ecbd50bc5fe848743a1a5a16a0b1be272ddf..f964a9c4ba822d34d047bd7e342bd221546ea282 100644 --- a/visualdl/backend/utils/concurrency.h +++ b/visualdl/backend/utils/concurrency.h @@ -1,6 +1,7 @@ #ifndef VISUALDL_BACKEND_UTILS_CONCURRENCY_H #define VISUALDL_BACKEND_UTILS_CONCURRENCY_H +#include #include #include #include @@ -14,10 +15,9 @@ namespace cc { * Each evoke will start a thread to do this asynchronously. */ struct PeriodExector { - using task_t = std::function; - using duration_t = std::chrono::milliseconds; + using task_t = std::function; - PeriodExector& Global() { + static PeriodExector& Global() { static PeriodExector exec; return exec; } @@ -27,11 +27,11 @@ struct PeriodExector { quit = true; } - void operator()(task_t&& task, duration_t duration) { - auto task_wrapper = [&, task] { + void operator()(task_t&& task, int msec) { + auto task_wrapper = [=] { while (!quit) { - task(); - std::this_thread::sleep_for(duration); + if (!task()) break; + std::this_thread::sleep_for(std::chrono::milliseconds(msec)); } }; threads_.emplace_back(std::thread(std::move(task_wrapper))); diff --git a/visualdl/backend/utils/test_concurrency.cc b/visualdl/backend/utils/test_concurrency.cc index e1aa182667bd7e1721336e19868d1cd2803e8488..9657e2d31e16453a790cf052703605da389999a2 100644 --- a/visualdl/backend/utils/test_concurrency.cc +++ b/visualdl/backend/utils/test_concurrency.cc @@ -1,3 +1,19 @@ +#include "visualdl/backend/utils/concurrency.h" + +#include #include -namespace visualdl {} // namespace visualdl \ No newline at end of file +namespace visualdl { + +int counter = 0; + +TEST(concurrency, test) { + cc::PeriodExector::task_t task = [&counter]() { + LOG(INFO) << "Hello " << counter++; + if (counter > 5) return false; + return true; + }; + cc::PeriodExector::Global()(std::move(task), 200); +} + +} // namespace visualdl \ No newline at end of file