Kezdőoldal » Számítástechnika » Programozás » Más GUI toolkit-ekben hogyan...

Ozmium42 kérdése:

Más GUI toolkit-ekben hogyan szokás ezt megoldani?

Figyelt kérdés

GTK-t és pythont használok.


Tegyük fel, hogy adott egy egyszerű Status Bar, ami mondjuk egy egyszerű 0-tól 100-ig for ciklus aktuális értékét jelzi ki, egy másodperces várakozásokkal.


A kihívás az számomra, hogy a for ciklus ne fagyassza be a main loop-ot, és minden ciklus után a Status Bar állapota változzon.


Gtk-ban ezt úgy oldom meg, hogy a ciklus egy függvényben van, a függvény egy thread targetje, és minden, ami ezen belül a Status Bar-t manipulálja, ahhoz a GLib.iddle_add() függvényt használom. Nem ismerem a pontos működését ennek, de valahogy megoldja a main loop-on kívüli feladatok ütemezését, hogy ne legyen hiba.


Gondolkoztam rajta, hogy célszerű lenne áttérni más toolkitre, pl. tkinterre, de nem találtam meg a fenti megoldás analógját, és ez tart vissza leginkább. Alternatív megoldást találtam, pl. generátor függvény használatát, de nem biztos, hogy azt általánosabb problémáknál is működne. Jó lenne, ha valaki elmagyarázná, hogy mi a bevett szokás, helyes módszer általában.



2020. máj. 22. 16:42
 1/8 A kérdező kommentje:
*idle_add()
2020. máj. 22. 16:47
 2/8 anonim ***** válasza:
25%
Hát.. igazából ezt úgy "szokás" megoldani, hogy minden N. cikluslefutáskor beállítod a kijelzőt (legyen szó akár egyszerű szöveges kijelzésről, progressbar-ról, gauge vezérlőről, stb). Ez nem tipikusan az a feladat, amit többszálúsítani szoktak.
2020. máj. 22. 16:47
Hasznos számodra ez a válasz?
 3/8 anonim ***** válasza:
62%
Én helyesbítem az előttem szólót. Úgy szokás megoldani, hogy az egész gui fut külön szálon az alkalmazástól. A gui szálban meg nem gond ha fennakadást okoz.
2020. máj. 22. 16:51
Hasznos számodra ez a válasz?
 4/8 A kérdező kommentje:
Egy valós alkalmazásban, amiben természetéből adódóan tucatnyi szálon történik mindenféle dolog, ott meg kell oldani, hogy ne fagyjon be az egész GUI, miközben egyetlen időigényesebb feladat folyik. Egyrészt az időigényes folyamatnak jeleznie kell, hogy hol tart, másrészt a többi dolognak mennie kell attól függetlenül.
2020. máj. 22. 17:01
 5/8 anonim ***** válasza:

Sehol nem említetted, hogy egy többszálú, és valós idejű rendszerről lenne szó.

Bár ez esetben... eléggé unortodox dolog ilyen feladatra szkriptnyelvet használni.

2020. máj. 22. 19:14
Hasznos számodra ez a válasz?
 6/8 A kérdező kommentje:

Nyugodtan okosítsatok ki, én amatőr vagyok, és nagyjából úgy néz ki nálam, hogy ha hülyeség, de működik, akkor nem hülyeség.


A példával csak a probléma gyökerét próbáltam megragadni. Az alkalmazás kész van, működik évek óta, pygtk-ban megírva. Csak ha másik toolkitben kellene megírni (fontolgattam), akkor a fenti probléma miatt vakarnám a fejem, pedig ez egy alap dolog.

2020. máj. 22. 19:59
 7/8 A kérdező kommentje:
Status Bar helyett is Progress Bart akartam írni.
2020. máj. 22. 20:04
 8/8 anonim ***** válasza:
Ezt úgy "szokták", hogy maga a munka része saját külön szálon fut, ami adott időközönként üzen a GUI szálnak, hogy megjelenítendő adat van. Az üzenetküldésnek többféle módja is van. (Lásd: interthread communication)
2020. máj. 23. 08:06
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!