Blockierendes Hauptfenster während Funktionsabarbeitung



  • Hi Allerseits,
    ich sitze leider schon den ganzen Tag an einem Problem.

    Ich habe eine VS2008-MFC-SDI-Anwendung. Ich starte meine Anwendung, drücke auf einen Button. Danach wird eine Funktion ausgeführt die ca. 2 Minuten rechnet und dabei einen Viewer startet der ein paar Images anzeigen soll. Der Viewer wird in dieser Funktion zwangsweise geschlossen und da die Anwendung solange alle Fenster blockiert bis die Funktion abgearbeitet ist, kann ich mit die Fenster vom Viewer nicht anschauen.

    Wie kann ich das beheben?
    Gruß speedo



  • ^Ganz einfach, indem du deine blockierende Superrechenfunktion nit im Handler deines Buttons abarbeitest, sondern alles in einen Thread verschiebst welchen du aus dem Handler deines Buttons startest. Alles verstanden?

    Gruß Matthias



  • CTecS schrieb:

    ^Ganz einfach, indem du deine blockierende Superrechenfunktion nit im Handler deines Buttons abarbeitest, sondern alles in einen Thread verschiebst welchen du aus dem Handler deines Buttons startest. Alles verstanden?

    Gruß Matthias

    Ich schon, aber denkst du, er auch? Es ist in der Tat so, dass man rechenintensives Zeug nicht innerhalb einer OnButton-Funktion ausführt. Problem dabei ist, dass du, solange du dich in der OnButten befindest, nicht wirklich die Nachrichtenwarteschlange nach neuen Nachrichten abprüfst. Es gibt da zwar ne dirty-Lösung, die sollte man sich aber nicht angewöhnen (habs früher allerdings auch gemacht).
    Lösung des Problems: Wie Matthias schon sagte, rechenintensive Schritte in einen Thread auslagern und dann in der OnButton nur den Thread starten bzw. einen bereits gestarteten und wartenden Thread weiterlaufen lassen. Allerdings musst du dich dann wieder um die korrekte Synchronisierung deines Workerthreads mit der GUI und somit auch dem Schutz der Daten kümmern.



  • Danke euch. Funktioniert 1a.


Anmelden zum Antworten