Sto lavorando con libfuse e l'interfaccia di glib glib e ho incontrato un problema in cui ho bisogno di eseguire più loop principali contemporaneamente (glib g_main_loop_run
e fuse_loop_mt
).È possibile eseguire più loop principali?
ho già cercato di creare un thread indipendente per il ciclo di eventi di glib in un contesto secondario, ad es .:
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);
Tuttavia il ciclo degli eventi glib non raccoglie su uno qualsiasi degli eventi sparati. Sono totalmente fuori base qui? Qual è il modo corretto per affrontare più loop principali?
Il modo migliore, suppongo, sarebbe di evitare più loop principali, se possibile. In alternativa, integra i loop di eventi in modo da poterne utilizzare solo uno per ricevere ed elaborare eventi. –
Purtroppo, questo non è possibile. Ho bisogno dell'interfaccia glib (libevent, ecc.) Per utilizzare l'interfaccia hiper di curl. Fusibile, per ovvi motivi serve anche un ciclo principale. –