Rechenzeit für Fensterevents einräumen



  • Hallo zusammen,

    ich habe folgedens grundsätzliches Problem. Ich arbeite an einem Progamm, dass seine Fenster selbst zeichnet. Dafür hat es für jeden Dialog eine Schleifen definiert die entsprechend die Window-Events interpretiert und dann entsprechende Routinen ausführt.
    Ungefähr so:

    do
    {
      switch(taste)
      { 
        case F2:
          aufrufDerRoutine();
      }
    
    }while(1);
    

    ich versuche jetzt die Oberfläche des Programms neu zu implementieren. (mit einem Framework names wxWidgets). Wenn ich ein Fenster dieses Frameworks aufrufe (ist eigenlich ein ganz normales Windowsfenster), so passiert es, dass das Fenster wie eingefrohren auf dem Bildschirm bleibt. Man kann dieses Fenster werder verschieben noch kann man die Steuerelemente darauf bedienen.

    Dieses Phänomen liegt an der do-while-Schleife die im Prinip ein ständiges POLLING durchführt und dem Fenster keine Chance lässt es zu verarbeiten. Meine Frage ist nun, ob es eine möglichkeit gibt, dieses Problem zu umgehen. Ich habe zwar die Variante schon gefunden, dass man die do-while()-Schleife komplett abbricht und dann den Fokus im Prinzip dem Fenster übergibt, doch es wäre viel schöner, wenn ich einen Befehl/MEthode aufrufen könnte die es erlaubt, dass das Fenster so lange verarbeitet wird, bis es geschlossen wird oder ein Fenster bzw. Steuerelement - Event auftritt und dass das Programm daraufhin die do-while() Verarbeitung wieder aufnimmt.

    Also nach diesem Prinzip:

    do
    {
      switch(taste)
      { 
        case F2:
          VerarbeiteFenster();
      }
    
    }while(1);
    

    Habt ihr einen Tipp? Ich habe es deshalb in dieses Forum geschrieben, da ich in VS 6 C++ entwickle.

    Vielen Dank für eure Hilfe!
    Gruß



  • Ein Programm kann nur eine Sache zur gleichen Zeit machen - und wenn es irgendwas im Hintergrund zu rechnen hat, kann es sich nicht um ankommende Nachrichten kümmern. Da bleibt dir nur noch die Möglichkeit, einen zweiten Thread zu starten, der das rechnen übernimmt.

    PS: Ich schick dich trotzdem mal ins wxWidget-Board 😉



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum MFC (Visual C++) in das Forum Andere GUIs - Qt, GTK+, wxWidgets verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Wieso nimmst du dieses do-while konstrukt? Denke es gibt bessere Alternativen, als eine Dndlosschleife.
    Und du sollstest evtl. einen modernen Compiler nehmen, der VC 6.0 ist veraltet.



  • Morgen...

    die Arbeit die ich machen soll basiert darauf, dass ich an einem bestehenden Programm (welches schon aus DOS Zeiten entwickelt wird) Änderungen vornehme.
    Klar ist, dass diese do-while - Konstrukte nicht gerade toll sind aber ich muss jetzt sehen, wie ich da ansetzen kann.

    Auch das ich mit VS6 arbeite ist vorgegeben. Würdet ihr empfehlen das gesamte Programm (also vor allem die GUI) komplett in wxWidgets umzusetzen oder sollte man trotzdem versuchen eine Zwischenlösung zu finden die es erlaubt sowohl neue wxWidgets Fenster aber auch die alten sebst gezeichneten Dialog zu nehmen??

    Wenn man sich für die Variante des kompletten neuentwickeln der GUI entscheidet, dann ist das Programm halt für eine gewisse Zeit nicht vermarktbar. Andererseits kostet die Zwischenlösung auch Zeit und man muss mit verschiedenen Abstrichen leben.


  • Mod

    Hm, kommt natürlich auch auf den Umfang an.
    Aber ich würde es schon versuchen, komplett in GUI zu entwickeln, weil sonst kommt es zu solchen Nebeneffekten wie du beschrieben hast.



  • Die Funktion, die du suchst heißt.
    wxWindow::Update

    Das ganze ist dann aber nicht so elegant.

    Überleg vielleicht außerdem mal, ob du nicht lieber die SDL verwenden willst. Das scheint mir in deinem Fall besser geeignet zu sein.


Anmelden zum Antworten