31 std::cout <<
"=== Minimal Thread Pool Sample (No Logger) ===" << std::endl;
35 auto pool = std::make_shared<thread_pool>(
"MinimalPool", context);
38 const size_t worker_count = 4;
39 std::vector<std::unique_ptr<thread_worker>> workers;
41 for (
size_t i = 0; i < worker_count; ++i) {
42 workers.push_back(std::make_unique<thread_worker>(
false, context));
46 auto result = pool->enqueue_batch(std::move(workers));
48 std::cerr <<
"Error adding workers: " <<
result.error().message << std::endl;
55 std::cerr <<
"Error starting pool: " <<
result.error().message << std::endl;
59 std::cout <<
"Thread pool started with " << worker_count <<
" workers" << std::endl;
62 std::atomic<int> completed_jobs{0};
63 const int total_jobs = 20;
65 std::cout <<
"Submitting " << total_jobs <<
" jobs..." << std::endl;
67 for (
int i = 0; i < total_jobs; ++i) {
68 auto job = std::make_unique<callback_job>(
69 [i, &completed_jobs, total_jobs]() -> kcenon::common::VoidResult {
71 std::this_thread::sleep_for(std::chrono::milliseconds(100));
74 int current = completed_jobs.fetch_add(1) + 1;
75 std::cout <<
"Job " << i <<
" completed. Total: "
76 << current <<
"/" << total_jobs << std::endl;
78 return kcenon::common::ok();
80 "job_" + std::to_string(i)
85 std::cerr <<
"Error enqueuing job: " <<
result.error().message << std::endl;
90 std::cout <<
"Waiting for jobs to complete..." << std::endl;
91 while (completed_jobs.load() < total_jobs) {
92 std::this_thread::sleep_for(std::chrono::milliseconds(100));
95 std::cout <<
"All jobs completed!" << std::endl;
98 auto stop_result = pool->stop();
99 if (stop_result.is_err()) {
100 std::cerr <<
"Error stopping pool: " << stop_result.error().message << std::endl;
102 std::cout <<
"Thread pool stopped." << std::endl;
Context object that provides access to optional services.
Context object providing access to optional thread system services.