Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : programm außerhalb der gtk_main() updaten



navi
09-02-2005, 12:22
Angenommen ich habe ein Programm mit gtk Oberfläche dass eine Operation ausführt die durch einen Buttonklick aufgerufen wird und dann bis zum Ende des Programms läuft. Jetzt möchte ich aber Infos über die laufende Operation in der GUI ausgeben. Da die Funktion nun aber nicht in die gtk_main() zurückkehrt wird die GUI auch nicht geupdatet. Das heist dass wenn ich das Fenster verschiebe alles verwischt und man nix mehr erkennen kann. Reicht es nun in der Operation das einzufügen:

while (gtk_events_pending ())
gtk_main_iteration ();

oder muss ich die Funktion in einem Thread starten. Eine Lösung ohne threads wäre mir bei weitem lieber.

BeS
09-02-2005, 12:47
while (gtk_events_pending ())
gtk_main_iteration ();


Das sollte so funktionieren, ich verwende es auch wenn ich z.B. einen progressbar implementiere.
Warum probierst du es nicht einfach aus?

navi
09-02-2005, 19:08
Hab das Programm schonmal geschrieben und meinte mich zu erinnern dass es nicht getan hat. Bin im Moment noch ned so weit dass ich es testen kann und wollt nun mal hören ob es auch noch andere Lösungsvarianten gibt. Ist immer ganz interessant mehrere Lösungen zu haben. Wenn ich dass nun so mache kann ich aber keine weiteren Klicks abfangen oder?

navi
10-02-2005, 11:00
Also ich habs jetzt doch mal mit Threads gelöst. Jetzt hab ich aber immernoch ein Problem und zwar dass die GUI nur geupdatet wird wenn ich meine Maus darüber bewege. Wenn ich meine Maus nicht bewege ändert sich auch an der GUI nix. Is ein bissel blöd. Dann macht nämlich alles einen Sprung wenn man die Maus nach 10sec wieder bewegt.

navi
10-02-2005, 14:34
und jetzt hab ich gleich nochmal eine Frage:
Da ich ja nun einen thread habe in dem die Operation läuft und ich aus diesem heraus die GUI updaten lasse muss ich doch bestimmt während des updaten die Elemente in die geschrieben wird per mutex sperren oder? Wie soll ich das nun aber machen da ich ja nur die Funktionen aufrufe wie gtk_set_text(). Wie soll ich die nun sperren?