145 void Push(std::shared_ptr<ChartTableEntryJobTicket> job) {
146 std::lock_guard<std::mutex> lock(m_mutex);
152 bool Pop(std::shared_ptr<ChartTableEntryJobTicket>& job) {
153 std::unique_lock<std::mutex> lock(m_mutex);
154 m_cv.wait(lock, [&] {
return !m_queue.empty() || m_shutdown; });
156 if (m_shutdown && m_queue.empty())
return false;
158 job = m_queue.front();
164 std::lock_guard<std::mutex> lock(m_mutex);
170 void AddWorker() { n_workers++; }
171 int GetWorkerCount() {
return n_workers; }
174 std::queue<std::shared_ptr<ChartTableEntryJobTicket>> m_queue;
176 std::condition_variable m_cv;
177 bool m_shutdown =
false;
184 : wxThread(wxTHREAD_DETACHED), m_queue(queue), m_target(target) {}
187 ExitCode Entry()
override {
188 std::shared_ptr<ChartTableEntryJobTicket> job;
190 while (m_queue.Pop(job)) {
192 job->b_isaborted =
true;
193 printf(
"job aborted\n");
200 wxQueueEvent(m_target, evt);
209 wxEvtHandler* m_target;