Многократные гору события на монтаже iPod
Вопрос
Я работаю над приложением, который должен обнаруживать, установлен ли объем хранилища или размонтирован. я использую GIO
для этого. Я слушаю mount-added
а также mount-removed
сигналы. Все работает нормально, когда я устанавливаю / размонтирующую ручку. Однако я вижу проблему при монтаже iPod. Я получаю два обратных вызова каждого на горе и размонтируйте. Я взял на себя один из 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 имеет два файловых система - один для ОС и один для хранения музыки. Следовательно, повторяющийся обратный вызов. То же самое происходит на размонтилее. Это не имеет ничего общего с затененными креплениями. К сожалению, я до сих пор не знаю, как различать двумя креплениями. Единственная разница GIO
показывает, что один из GMount
объекты не имеют GVolume
объект, связанный с ним. Я не знаю, как интерпретировать это.