मैं libfuse और glib event इंटरफ़ेस दोनों के साथ काम कर रहा हूं और मैंने एक ऐसे मुद्दे में भाग लिया है जहां मुझे कई मुख्य लूपों को एक साथ चलाने की आवश्यकता है (glib's g_main_loop_run
और fuse_loop_mt
)।एकाधिक मुख्य लूप चलाने के लिए संभव है?
मैं पहले से ही एक उच्च माध्यमिक संदर्भ के तहत चिकना के घटना पाश के लिए बनाई गई एक अलग धागा करने का प्रयास किया, उदा .:
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);
हालांकि फिसलनदार घटना पाश निकाल दिया घटनाओं में से किसी पर लेने नहीं करता है। क्या मैं यहां पूरी तरह से आधार पर हूं? एकाधिक मुख्य लूप से निपटने का सही तरीका क्या है?
सबसे अच्छा तरीका मुझे लगता है कि यदि संभव हो तो एकाधिक मुख्य लूपों से बचने के लिए सबसे अच्छा तरीका होगा। वैकल्पिक रूप से ईवेंट लूप को एकीकृत करें ताकि आप ईवेंट प्राप्त करने और संसाधित करने के लिए केवल एक का उपयोग कर सकें। –
दुर्भाग्यवश, यह संभव नहीं है। कर्ल हाइपर इंटरफ़ेस का उपयोग करने के लिए मुझे ग्लिब (libevent, आदि ..) इंटरफेस की आवश्यकता है। फ्यूज, स्पष्ट कारणों से भी मुख्य लूप की आवश्यकता है। –