| 206 | } |
| 207 | |
| 208 | bool Async::processWorkerEvent(Own<QEvent> event, Async* owner) { |
| 209 | switch (Switch::hash(event->getName())) { |
| 210 | case "Work"_hash: { |
| 211 | Own<std::function<void()>> worker; |
| 212 | event->get(worker); |
| 213 | (*worker)(); |
| 214 | return false; |
| 215 | } |
| 216 | case "WorkDone"_hash: { |
| 217 | Own<WorkDone> workDone; |
| 218 | event->get(workDone); |
| 219 | Own<Values> result = workDone->first(); |
| 220 | owner->_finisherEvent.post(Slice::Empty, std::move(workDone), std::move(result)); |
| 221 | return false; |
| 222 | } |
| 223 | case "Stop"_hash: { |
| 224 | return !owner->isPoolWorker(); |
| 225 | } |
| 226 | } |
| 227 | return false; |
| 228 | } |
| 229 | |
| 230 | bool Async::isPoolWorker() const { |
| 231 | return _pool != nullptr; |