| 107 | } |
| 108 | |
| 109 | bool TaskGroup::pushTask(std::shared_ptr<Task> task, TaskPriority priority) { |
| 110 | #ifndef TGFX_USE_THREADS |
| 111 | return false; |
| 112 | #endif |
| 113 | if (exited || !checkThreads()) { |
| 114 | return false; |
| 115 | } |
| 116 | auto& queue = priorityQueues[static_cast<size_t>(priority)]; |
| 117 | if (!queue->enqueue(task)) { |
| 118 | return false; |
| 119 | } |
| 120 | if (waitingThreads > 0) { |
| 121 | condition.notify_one(); |
| 122 | } |
| 123 | return true; |
| 124 | } |
| 125 | |
| 126 | std::shared_ptr<Task> TaskGroup::popTask() { |
| 127 | std::unique_lock<std::mutex> autoLock(locker); |