أحداث جبل متعددة على تصاعد iPod
سؤال
أنا أعمل على تطبيق يجب أن يكتشف ما إذا كان حجم التخزين مثبتًا أو غير مثبت. انا استخدم GIO
من أجل هذا. أستمع ل mount-added
و mount-removed
إشارات. كل شيء يعمل بشكل جيد عندما أقوم بتركيب/إلغاء محرك القلم. ومع ذلك ، أرى مشكلة عند تصاعد iPod. أحصل على عاتق عاتق كل منهما على جبل و unmount. افترضت واحدة من GMount
ستكون الأشياء مظللة لكن g_mount_is_shadowed يعود خطأ لكليهما. كيف يمكنني أن أقرر أي واحد يجب معالجته وأي شيء يجب تجاهله؟ لا أستطيع معالجة كليهما. لا بد لي من اكتشاف الجبل/غير المقابل لجهاز التخزين ومعالجة ذلك فقط.
int main()
{
g_type_init();
GVolumeMonitor* volume_monitor = g_volume_monitor_get();
g_signal_connect(G_OBJECT(volume_monitor), "mount-added", G_CALLBACK(mount_added), NULL);
g_signal_connect(G_OBJECT(volume_monitor), "mount-removed", G_CALLBACK(mount_removed), NULL);
GMainLoop* main_loop = g_main_loop_new(NULL, FALSE);
g_main_loop_run(main_loop);
...
}
المحلول
لقد حظيت بها. GIO
تنبعث أ mount-added
إشارة لكل نظام ملفات يتم إضافتها. يحتوي iPod على نظامين للملفات - واحد لنظام التشغيل وواحد لتخزين الموسيقى. وبالتالي رد الاتصال المتكرر. الشيء نفسه يحدث على unmount. هذا لا علاقة له مع حوامل مظللة. لسوء الحظ ، ما زلت لا أعرف كيفية التمييز بين الاثنين. والفرق الوحيد GIO
يظهر أن واحدة من GMount
الكائنات لا تحتوي على ملف GVolume
كائن مرتبط به. لا أعرف كيف أفسر ذلك.