提交 7c5bc863 编写于 作者: S superjom

add concurrency

上级 3a4fcf90
......@@ -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)
#ifndef VISUALDL_BACKEND_UTILS_CONCURRENCY_H
#define VISUALDL_BACKEND_UTILS_CONCURRENCY_H
#include <glog/logging.h>
#include <chrono>
#include <memory>
#include <thread>
......@@ -14,10 +15,9 @@ namespace cc {
* Each evoke will start a thread to do this asynchronously.
*/
struct PeriodExector {
using task_t = std::function<void()>;
using duration_t = std::chrono::milliseconds;
using task_t = std::function<bool()>;
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)));
......
#include "visualdl/backend/utils/concurrency.h"
#include <glog/logging.h>
#include <gtest/gtest.h>
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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册