147 void Push(std::shared_ptr<ChartTableEntryJobTicket> job) {
148 std::lock_guard<std::mutex> lock(m_mutex);
154 bool Pop(std::shared_ptr<ChartTableEntryJobTicket>& job) {
155 std::unique_lock<std::mutex> lock(m_mutex);
156 m_cv.wait(lock, [&] {
return !m_queue.empty() || m_shutdown; });
158 if (m_shutdown && m_queue.empty())
return false;
160 job = m_queue.front();
166 std::lock_guard<std::mutex> lock(m_mutex);
172 void AddWorker() { n_workers++; }
173 int GetWorkerCount() {
return n_workers; }
176 std::queue<std::shared_ptr<ChartTableEntryJobTicket>> m_queue;
178 std::condition_variable m_cv;
179 bool m_shutdown =
false;
186 : wxThread(wxTHREAD_DETACHED), m_queue(queue), m_target(target) {
187 printf(
"New thread\n");
191 ExitCode Entry()
override {
192 std::shared_ptr<ChartTableEntryJobTicket> job;
194 while (m_queue.Pop(job)) {
196 job->b_isaborted =
true;
197 printf(
"job aborted\n");
204 wxQueueEvent(m_target, evt);
212 wxEvtHandler* m_target;