Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Diego
Založen: 03. 12. 2007 Příspěvky: 2
|
Zaslal: 3. prosinec 2007, 11:24:31 Předmět: GTK |
|
|
potreboval bych poradit s GTK. Prohlizel sem si tutorialy ale ty me nak moc nenadchly. Seznam fci a co delaj si zvladam asi najit ale nevim jak smatlat to prostredi aby to ve zdrojaku melo nakej poradek, nastavovani velikosti atd... proste siknul by se mi tutorial nebo okomentovanej zdrojak kde je videt jak to spravne psat.. dost me matou i funkce ktery akorat volaj jinou fci a nic jinyho ale to vem cert
momentalne sem se snazil udelat okno [done], box s tlacitkama [semidone].. jako vytvorit widget zvladnu, hodit ho do containeru taky ale zaridit aby mel tu spravnou velikost a nepretejkali mi texty atd to uz je neco jinyho... zacina me to stvat vic nez xhtml |
|
Návrat nahoru |
|
|
ladik-BigBoss
Založen: 28. 07. 2007 Příspěvky: 162
|
Zaslal: 12. prosinec 2007, 09:44:04 Předmět: |
|
|
ja na to pouzivam Glade. vlastnosti GUI si naklikas a ulozis do XML a pak dopises callbacky, pripadne v kodu vytvoris objekty jako seznamy... nacteni GUI se provadi dynamicky za behu programu |
|
Návrat nahoru |
|
|
byvoko
Založen: 24. 04. 2012 Příspěvky: 3
|
Zaslal: 24. duben 2012, 15:41:35 Předmět: |
|
|
Ahoj, mam problém s GTK a už nevim co s tim. Dělám program, kterej čte, ve vlastním vlákně, data ze seriáku (konkrétně z GPSky) a pak je zapisuju do textovejch polí. Jenomže tady nastává problém s refrešem okna. Na netu jsem našel tohle:
while(gtk_events_pending()){gtk_main_iteration_do(true);}
což mě ale do konzole vypisuje warning:
Glib-WARNING **: g_main_context_prepare(): main loop alredy active in another thread
a po nějaký době program spadne, popřípadě když vyvolám nějakou událost, jako kliknutí na tlačítko posunutí s oknem,....
Nemá s tim někdo zkušenosti? |
|
Návrat nahoru |
|
|
Crypton
Založen: 14. 05. 2009 Příspěvky: 306 Bydliště: The Void
|
Zaslal: 24. duben 2012, 16:24:56 Předmět: |
|
|
Číšníku! Prosil bych jeden středně propečený BAN. Platit bude pan byvoko. _________________
|
|
Návrat nahoru |
|
|
byvoko
Založen: 24. 04. 2012 Příspěvky: 3
|
Zaslal: 24. duben 2012, 16:40:59 Předmět: |
|
|
Co jsem proved tak hroznýho?
Nemam moc zkušenosti s vláknama a gtk, takže je možný že jsem se zeptal na kravinu. Jako chybu bych viděl v tom že tam chybí zámek (mutex). Kdybych obě fce dělal já, tak to tam narvu, ale gtk_main spustim a do něj se nedostanu ne? Budu rád klidně i za jedno užitečný slovo, google znám |
|
Návrat nahoru |
|
|
nou
Založen: 28. 07. 2007 Příspěvky: 1047
|
Zaslal: 24. duben 2012, 17:21:20 Předmět: |
|
|
1. nekromancia. posledny post je tu z pred piatich rokov.
2. das otazku do sice suvisiacej temy ale uplne odlisny problem. _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
|
ladik-BigBoss
Založen: 28. 07. 2007 Příspěvky: 162
|
Zaslal: 27. duben 2012, 18:26:11 Předmět: |
|
|
přestože tu řešíte bany, zkusím odpovědět na co se byvoko ptal:
Přidáš si přes g_idle_add() funkci, kterou bude GTK volat ve svojí gtk_main smyčce, pokud nemá na vyřízení jiné zprávy GUI. V této funkci můžeš manipulovat s widgety (používal jsem to na realtime OpenGL kreslení) a zároveň tam můžeš číst s mutexem data, které updatuješ ve svém vlákně (zase s mutexem).
a vlastně bys to mohl dělat tak, že druhé vlákno nepotřebuješ a budeš
přímo z té funkce číst ze serialu
pseudo kod:
kód: |
GPSdata position;
gint gps_gui_update(void *userdata) // pointer predany v druhem argumentu g_idle_add()
{
position.readSerial()
gtk_label_set_text(gps_position_label, position.toCString());
return TRUE; // vola se stale dal
}
// nekde v main() :
g_idle_add(myfunc, NULL); // tady by se elegantne dali predavat data, aby nebyli potreba globalni promenne ci singleton...
gtk_main();
|
|
|
Návrat nahoru |
|
|
byvoko
Založen: 24. 04. 2012 Příspěvky: 3
|
Zaslal: 5. květen 2012, 14:24:13 Předmět: |
|
|
Díky moc, konečně něco co funguje. |
|
Návrat nahoru |
|
|
|