私はlibfuseとglibイベントインターフェイスの両方で作業しています。私は複数のメインループを同時に実行する必要がある問題に遭遇しました(glibのg_main_loop_run
とfuse_loop_mt
)。複数のメインループを実行できますか?
私はすでに二次コンテキストでのglibのイベントループ用に作成された切り離されたスレッドにしようとしてきた、例えば:glibのイベントループが発射イベントのいずれかにピックアップしていませんが
static void *
event_loop(void *arg)
{
GMainLoop *event_loop;
GMainContext *context;
context = g_main_context_new();
g_main_context_push_thread_default(context);
event_loop = g_main_loop_new(context, FALSE);
g_main_loop_run(event_loop);
return NULL;
}
...
pthread_t event_thread;
pthread_attr_t thread_attr;
pthread_attr_init(&thread_attr);
pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED);
event_thread = pthread_create(&event_thread, &thread_attr,
event_loop, NULL);
。私は完全にオフベースですか?複数のメインループに取り組む適切な方法は何ですか?
可能であれば、複数のメインループを避けることをお勧めします。または、イベントループを統合して、1つだけを使用してイベントを受信して処理することもできます。 –
残念ながら、それは不可能です。カールハイパーインターフェイスを利用するには、glib(libeventなど)インターフェイスが必要です。明白な理由から、ヒューズはまた、メインループを必要とする。 –