Portál AbcLinuxu, 6. května 2025 14:55

Vlákna a GTK

10.12.2006 21:41 | Přečteno: 1329× | Linux

Bože, už jste někdy zkoušeli pracovat s vlákny a GTK najednou? Nejde to do sebe. Ačkoliv je glib "thread safe", u GTK tomu tak není. Před jakoukoliv manipulací s widgetem musíte zavolat gdk_threads_enter() a po dokončení manipulace gdk_flush() a gdk_threads_leave(). A do toho ještě signály ... V těch od glib se to volat musí, ale v těch od gtk ne.

Proč se o to nepostará samo GTK, tak jako je tomu třeba u Qt, WinAPI a jánevímkdeještě.

Bože, jak mam naprogramovat kvalitní commander bez podpory (nebo s debilní podporou) vláken.

       

Hodnocení: 58 %

        špatnédobré        

Anketa

Jak se vám líbí práce s vlákny v GTK?
 (10 %)
 (8 %)
 (10 %)
 (19 %)
 (33 %)
 (2 %)
 (19 %)
Celkem 52 hlasů

Anketa

Jak se vám líbí práce s vlákny v GTK?
 (0 %)
 (0 %)
 (100 %)
 (0 %)
 (0 %)
 (0 %)
 (0 %)
Celkem 1 hlasů

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

Komentáře

Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

10.12.2006 21:55 xxxxxxxx | skóre: 16 | blog: mrtvy blog | v nebi
Rozbalit Rozbalit vše Re: Vlákna a GTK
Odpovědět | Sbalit | Link | Blokovat | Admin
Chybí mi možnost "Nedělám" ;-)
www.pcnews.cz
Luk avatar 10.12.2006 21:57 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: Vlákna a GTK
Odpovědět | Sbalit | Link | Blokovat | Admin
Připomínám, že takový javovský Swing také není thread-safe. Všechno se tam dělá z jednoho vlákna (event-dispatching thread) a když se musí něco udělat odjinud, volá se invokeLater() nebo invokeAndWait(). Má to logiku, nemusí se pak nic zbytečně zamykat, není tedy režie navíc.
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
11.12.2006 12:54 petr
Rozbalit Rozbalit vše Re: Vlákna a GTK
Jo, tohle řešení Swingu se mi osobně líbí ze všeho nejvíc a okamžitě jsem si na něj zvyknul... Od té doby řeší thread-safe jen v modelu mých aplikací;-)
Luboš Doležel (Doli) avatar 11.12.2006 00:28 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Vlákna a GTK
Odpovědět | Sbalit | Link | Blokovat | Admin
Bože, jak mam naprogramovat kvalitní commander bez podpory (nebo s debilní podporou) vláken.
Vykašlat se na celé GTK+ a začít s Qt 4. Taky jsem dělal v GTK+ a GTKmm, ale jakmile jsem poznal Qt, tak už si na GTK+ ani nevzpomenu - je to neuvěřitelná úleva.

R.I.P. GTK...
Fuky avatar 11.12.2006 00:52 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Vlákna a GTK

Je dobré nejprve věci pochopit a teprve poté je odsuzovat a samozřejmě veškerou kritiku podložit argumenty, za kterými si můžete stát ;-)

GTK je moc chytře udělané a nevyvíjí ho žádní žabaři. To samé platí o Qt. Tyto dva toolkity jsou si +- naprosto rovny :-D

Daniel Kvasnička ml. avatar 11.12.2006 09:01 Daniel Kvasnička ml. | skóre: 52 | blog: The Joys and Sorrows of Being an IT Freak | Ostrava
Rozbalit Rozbalit vše Re: Vlákna a GTK
No pokud vim, tak autorovi jde o twin-panel commander pro GTK+, takze me zatim napada jedina zachrana a to zkusit wxWidgets. S wxPythonem jsem celkem spokojen.
FSF: “screw you for not wanting the stuff we produce”, People: “screw you for not producing the stuff we want."
Fuky avatar 11.12.2006 00:39 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Vlákna a GTK
Odpovědět | Sbalit | Link | Blokovat | Admin

Mě to vyhovuje ;-) Dříve jsem používal také enter/leave, ale pak jsem se dočetl, že toto řešení nedoporučují ať použiju raději:

gobject.idle_add(tlacitko_BT.set_sensitive, True)

Když to najdu pošlu sem link. Každopádně tenhle druhý způsob se mi líbí víc.

-- RÁMO: psí tábor , ETriatlon: Výuka plavání
11.12.2006 09:58 Jaroslav Šmíd
Rozbalit Rozbalit vše Re: Vlákna a GTK
Tak tohle se zdá být lepší. Tak nějak to snad v tom C++ spatlám (snad to půjde) :-)
12.12.2006 12:12 Petr "Glubo" Sýkora | skóre: 21 | blog: Glubnik
Rozbalit Rozbalit vše Re: Vlákna a GTK
Odpovědět | Sbalit | Link | Blokovat | Admin
Nevím, ale přijde mi, že o každý widget by se stejně mělo starat právě jedno vlákno. Jelikož když si budou jednotlivá vlákna povídat tím, že jedno vlákno šoupne šoupátkem doleva jinému vláknu místo toho, aby mu prostě poslalo int, pak tu něco strašně smrdí... Když už vlákna, tak pořádně :)
„O mrtvých jen v dobrém." „Pojďme se bavit o Stalinovi."
Jardík avatar 12.12.2006 19:19 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Vlákna a GTK
Né, takto to řešit opravdu nehodlám. Při zahájení kopírování souborů se vytvoří nové vlákno, které obdrží seznam souborů. To vytvoří nové okno s ukazatelem průběhu a spustí se kopírování. Po dokončení ze okno zruší a vlákno se ukončí. Bude tak možné dále pracovat s commanderem a přitom se v klidu kopírují soubory.
Věřím v jednoho Boha.
Jardík avatar 12.12.2006 19:22 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Vlákna a GTK
Teď přemýšlím, jestli by nebylo lepší vytvořit dočasný soubor a nespustit novou instanci aplikace s parametrem cesty k souboru .... Bylo by to méně bugové. Asi to tak udělám a vykašlu se na vlákna.
Věřím v jednoho Boha.
Luk avatar 12.12.2006 20:04 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: Vlákna a GTK
A proč to neudělat tak, že kopírující vlákno bude pouze aktualizovat nějakou hodnotu stavu kopírování (třeba 0 .. 100) a hlavní vlákno (starající se o GUI) bude periodicky - např. každých 500 ms - tuto hodnotu číst a aktualizovat progress bar? To mi připadá jako čistší a méně náročné řešení než nějaké nové spouštění aplikace.
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
12.12.2006 22:04 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Vlákna a GTK
Ale priznejme si, ze neni nad cisty vlaknomilny toolkit. Ty aplikace jinak uvnitr vypadaji hrozne, cely to je GUI-centricky a clovek je pak strasne omezeny a vubec.

Založit nové vláknoNahoru

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