close https://github.com/livekit/client-sdk-flutter/issues/734 - [x] Windows - [x] Linux 
32 lines
819 B
C++
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
|