[wxWidgets] laufende Funktion abbrechen



  • Hallo liebe Community,

    ich schreibe gerade an einer Simulation und nutze dabei wxWidgets und kein Multithreading. Bin beim Thema GUI-Programmierung noch Neuling.

    Momentan läuft das Programm so ab:
    Ein Klick auf den Berechnungsbutton startet die Funktion berechnung() .

    Diese kann aber möglicherweise sehr lange rechnen, sodass ich einen Abbruchbutton einbauen möchte. Wie kann ich das am geschicktesten anstellen? Das Problem hierbei ist, dass das Fenster (von alleine) nicht auf Eingaben reagiert, solang er in berechnung() feststeckt.

    Für die GUI benutze ich Code::Blocks mit wxSmith.


  • Mod

    Ähm, also abgesehen davon, das du in der Funktion die Eventschleife immer mal wieder ausführen könntest (hm, war glaub ich wxYield(), muss du mal in die Doku sehen), gehört sowas eigentlich in einen eigenen Thread, dem kannst du dann eine Abbruchbedingung geben, die du auch von aussen beinflussen kannst.

    phlox



  • Hab bisher noch nie mit Threads gearbeitet. Wichtig ist, dass der Quelltext Cross-Platform kompilierbar ist (weil ich Linux nutze, aber das Programm auch für Windows kompilieren muss).
    Geht das und hast du vielleicht einen Linktipp dazu?


  • Mod

    Das geht mit wxThread problemlos.
    Nur mit wxCriticalSection musst du evtl. aufpassen, da gibts unter Linux den Bug das es den falschen Block benutzt.


Anmelden zum Antworten