30 {
31 std::cout << "=== Minimal Thread Pool Sample (No Logger) ===" << std::endl;
32
33
35 auto pool = std::make_shared<thread_pool>("MinimalPool", context);
36
37
38 const size_t worker_count = 4;
39 std::vector<std::unique_ptr<thread_worker>> workers;
40
41 for (size_t i = 0; i < worker_count; ++i) {
42 workers.push_back(std::make_unique<thread_worker>(false, context));
43 }
44
45
46 auto result = pool->enqueue_batch(std::move(workers));
48 std::cerr <<
"Error adding workers: " <<
result.error().message << std::endl;
49 return 1;
50 }
51
52
55 std::cerr <<
"Error starting pool: " <<
result.error().message << std::endl;
56 return 1;
57 }
58
59 std::cout << "Thread pool started with " << worker_count << " workers" << std::endl;
60
61
62 std::atomic<int> completed_jobs{0};
63 const int total_jobs = 20;
64
65 std::cout << "Submitting " << total_jobs << " jobs..." << std::endl;
66
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 {
70
71 std::this_thread::sleep_for(std::chrono::milliseconds(100));
72
73
74 int current = completed_jobs.fetch_add(1) + 1;
75 std::cout << "Job " << i << " completed. Total: "
76 << current << "/" << total_jobs << std::endl;
77
78 return kcenon::common::ok();
79 },
80 "job_" + std::to_string(i)
81 );
82
85 std::cerr <<
"Error enqueuing job: " <<
result.error().message << std::endl;
86 }
87 }
88
89
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));
93 }
94
95 std::cout << "All jobs completed!" << std::endl;
96
97
98 auto stop_result = pool->stop();
99 if (stop_result.is_err()) {
100 std::cerr << "Error stopping pool: " << stop_result.error().message << std::endl;
101 }
102 std::cout << "Thread pool stopped." << std::endl;
103
104 return 0;
105}
Represents a unit of work (task) to be executed, typically by a job queue.
A template class representing either a value or an error.
Context object that provides access to optional services.