Portál AbcLinuxu, 11. května 2025 10:45

Dotaz: GTK: smí se volat gtk_main_iteration() místo gtk_main()?

1.9.2004 22:35 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
GTK: smí se volat gtk_main_iteration() místo gtk_main()?
Přečteno: 112×
Odpovědět | Admin
Ahoj,

řeším, jak v GTK (konkrétně 1.2, ale zajímalo by mě to i pro 2.4) zpracovávat posix signál, resp. jak se vecpat do smyčky GTK a zpracovat příznak, který mi nastaví handler toho signálu. Nechce se mi používat idle funkce nebo timeouty, protože by to zbytečně běželo naprázdno. Zatím jsem to vyřešil tak, že místo gtk_main() volám gtk_main_iteration():
gtk_init(&argc, &argv);
/* vytvoreni widgetu, nastaveni signal handleru */
/* ... */ 
/* tohle je misto gtk_main() */
while (1) {
        /* pokud prijde SIGCHLD, vrati ze z poll() a skonci */
        gtk_main_iteration();
        /* pokud signal handler nastavil priznak, zavola
         * waitpid() a muze volat i funkce GTK
         */
        wait_zombies();
}
Ale nevím, jestli to nemůže způsobit nějaké komplikace když nevolám gtk_main() (jejíž zdroják vypadá docela záhadně), nebo jestli si po zavolání gtk_init() můžu dělat co chci.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

1.9.2004 23:41 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: GTK: smí se volat gtk_main_iteration() místo gtk_main()?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Hm, tak signály jsem takhle v Gtk+ aplikaci zpracovávat nezkoušel. Ale na 2.4 IMHO chceš g_child_watch_add(), resp. g_child_watch_add_full().
1.9.2004 23:53 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: GTK: smí se volat gtk_main_iteration() místo gtk_main()?
Ve složitějším případě by se asi hodilo vecpat s novým zdrojem událostí do příslušné GMainLoop, ale moc nevidím API, kterým by se to udělalo ... nicméně si vzpomínám z Gtk+ konference, že to někde snad popsáno je, protože na to někdo odkazoval -- snad Google pomůže ;-)
3.9.2004 15:34 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
Rozbalit Rozbalit vše Re: GTK: smí se volat gtk_main_iteration() místo gtk_main()?
Diky, nakonec jsem to vyresil tak, ze s glib >= 2.4 se pouzije g_spawn_async() + g_child_watch_add() a vola se normalne gtk_main(), a se starsi glib se pouzije to puvodni reseni.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.