Files
client-sdk-flutter/linux/task_runner_linux.cc

32 lines
819 B
C++

#include "task_runner_linux.h"
#include <glib.h>
namespace livekit_client_plugin {
void TaskRunnerLinux::EnqueueTask(TaskClosure task) {
{
std::lock_guard<std::mutex> lock(tasks_mutex_);
tasks_.push(std::move(task));
}
GMainContext* context = g_main_context_default();
if (context) {
g_main_context_invoke(
context,
[](gpointer user_data) -> gboolean {
TaskRunnerLinux* runner = static_cast<TaskRunnerLinux*>(user_data);
std::lock_guard<std::mutex> lock(runner->tasks_mutex_);
while (!runner->tasks_.empty()) {
TaskClosure task = std::move(runner->tasks_.front());
runner->tasks_.pop();
task();
}
return G_SOURCE_REMOVE;
},
this);
}
}
} // namespace livekit_client_plugin