Я пытаюсь использовать threadPool с помощью cpprestsdk
.
Ниже приведен тестовый код для использования внутреннего пула потоков. TaskA
и TaskB
- фиктивные задачи. Добавлены задержки для имитации длительной обработки задач.
тестовый код.
#include "cpprest/asyncrt_utils.h"
#include <map>
using namespace std;
using namespace utility;
void TaskA() {
sleep(rand()%5);
cout <<"taskA executing .."<< endl;
}
void TaskB() {
sleep(rand()%5);
cout <<"taskB executing .."<< endl;
}
std::map<int,std::function<void(void)>> taskIdMap = {
{0, TaskA},
{1, TaskB}
};
int main() {
srand(time(NULL));
int cnt = 100; // 100 task to dispatch
while(cnt--) {
int taskId = rand()%2; // simulates an receipt of an event or task
auto func = taskIdMap[taskId];
pplx::task<int>([func,taskId]()
{
func();
return taskId;
})
.then([](pplx::task<int> prevTask)
{
auto id = prevTask.get();
cout <<(id == 0?"TaskA is done !":"TaskB is done !") <<endl;
});
}
cout<<"No more task to dispatch. Main thread is free now"<<endl;
getchar();
}
/*
system Ubuntu 18.04 =>
CMakeLists.txt
cmake_minimum_required (VERSION 3.5)
set(CMAKE_BUILD_TYPE Debug)
project(TEST)
message(STATUS "Compiling TestFile : ${PROJECT_NAME}")
set (CMAKE_CXX_STANDARD 14)
message(STATUS "Project Directory: ${PROJECT_SOURCE_DIR}")
set (CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/build)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
add_executable(${PROJECT_NAME} test.cpp)
set(REST_LIBRARIES "-lcpprest")
set(CMAKE_CXX_FLAGS "-std=c++14 -Wall -g -fsanitize=address")
target_link_libraries(${PROJECT_NAME} ${REST_LIBRARIES})
*/
Как увеличить количество потоков, по умолчанию в моей системе (Ubuntu) создается 40 потоков.
Есть вызов функции ref , но я не уверен, как его использовать.