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);
173 void AddWorker() { n_workers++; }
174 int GetWorkerCount() {
return n_workers; }
175 std::atomic<int> pending_events{0};
178 std::queue<std::shared_ptr<ChartTableEntryJobTicket>> m_queue;
180 std::condition_variable m_cv;
181 bool m_shutdown =
false;
194 : wxThread(wxTHREAD_DETACHED), m_queue(queue), m_target(target) {
195 printf(
"New thread\n");
199 ExitCode Entry()
override {
200 std::shared_ptr<ChartTableEntryJobTicket> job;
202 while (m_queue.Pop(job)) {
204 while (m_queue.pending_events.load(std::memory_order_relaxed) >
205 kMAX_EVENT_THROTTLE) {
210 job->b_isaborted =
true;
211 printf(
"job aborted\n");
218 wxQueueEvent(m_target, evt);
219 m_queue.pending_events++;
227 wxEvtHandler* m_target;