}
}
-void TaskQueue::Async(const std::function<void()>& work) {
+void TaskQueue::Stop() {
+ LoggerI("Stopping TaskQueue workers");
+ queue_worker_.stop();
+ async_worker_.stop();
+}
+
+void TaskQueue::ScheduleWorkInMainThread(const std::function<void()>& work) {
QueueData<void>* d = new QueueData<void>();
- d->after_work_callback_ = work;
- if (!g_idle_add(AfterWorkCallback<void>, d)) {
+ d->work_callback_ = work;
- g_idle_add(WorkCallback<void>, d);
++
++ if (!g_idle_add(WorkCallback<void>, d)) {
+ LoggerE("g_idle_add failed");
+ delete d;
+ }
}
} // namespace common
template <class T>
void TaskQueue::Async(const std::function<void(const std::shared_ptr<T>&)>& work,
const std::shared_ptr<T>& data) {
+ auto do_work = [data, work]() { work(data); };
+ this->async_worker_.add_job(do_work);
+}
+
+template <class T>
+void TaskQueue::ScheduleWorkInMainThread(const std::function<void(const std::shared_ptr<T>&)>& work,
+ const std::shared_ptr<T>& data) {
QueueData<T>* d = new QueueData<T>();
- d->after_work_callback_ = work;
+ d->work_callback_ = work;
d->data_ = data;
- g_idle_add(WorkCallback<T>, d);
- if (!g_idle_add(AfterWorkCallback<T>, d)) {
++
++ if (!g_idle_add(WorkCallback<T>, d)) {
+ LoggerE("g_idle_add failed");
+ delete d;
+ }
}
} // namespace common