Programm-Design Multithreading



  • Hallo Leute!

    Knifflige Angelegenheit bzgl Multithreading.
    Von einem selbst gebauten uC-System Frage ich Daten über die RS232 ab. Das ganze hatte ich zuerst als Single-Threaded-Application, hatte aber Probleme mit dem Timing. Wenn man etwas auf der Oberfläche drückt oder zwischen den laufenden Applikationen umschaltet, gibts Probleme bei der Datenübertragung, weil ich ein ziemlich straffes Timing fahre (Timeouts treten auf uC-Seite auf etc).

    Also dachte ich mir, ich pack das ganze in einen Thread, der von solchen Einföüssen verschon bleibt. Funktioniert auch wunderbar, allerdings wird die Oberfläche des Programms nicht mehr aktualisiert...
    (hatte das zuvor mit Applicaton->ProcessMessages() gemacht).
    Das Problem ist wohl, dass ich im Hauptprogramm mit WaitFor() auf das Ende des Threads warte, um mit den empfangenen Daten weiterabreiten zu können, und die Oberfläche im Thread nicht aktualisiert werden kann...

    Was nun tun? 😕



  • Original erstellt von flosko:
    Das Problem ist wohl, dass ich im Hauptprogramm mit WaitFor() auf das Ende des Threads warte

    richtig. Da schlägt mal wieder typisch der uC-Programmierer durch (o;

    Du machst einen bestimmten Fehler: DU brauchst auf gar nichts zu warten, das Warten erledigt der Loop des Fensters. Der übliche Weg um sowas möglichst unabhängig voneinander zu ermöglichen wäre wohl das Versenden einer (eigenen)Message über PostMessage() bei Thread ende.

    Eine andere (in meinen Augen etwas schlechtere Lösung) wäre das Warten mittels WaitForSingleObject() auf das Thread-Handle. (sowas hier:

    /* Alle 100ms die Messagequeue abarbeiten. 
      und dabei warten bis der Thread beendet ist. */
    while(WaitForSingleObject(CommThread->Handle, 100) == WAIT_TIMEOUT)
        Application->ProcessMessages();
    

    )
    Der oben getippte Code lässt sich naütrlich verfeinern ist aber so oder so eigentlich zimlicher Mist das so zu lösen. Wie ich erwähnte das Versenden einer Message ist der eleganteste Weg. Da ja das Timing vermutlich "nur" auf Acknowledges relativ straff ist, besteht keine Eile nach dem Ende des Threads die "Aufräumarbeiten" aufzunehmen.

    Ich hoffe ich hab mich einigermassen verständlich ausgedrückt *smile* ansonsten: nachfragen.

    -junix

    [ Dieser Beitrag wurde am 13.05.2003 um 17:09 Uhr von junix editiert. ]



  • ja, stimmt, an Messages hab ich gar ned gedacht
    werd mal rumprobieren, was da am besten funktioniert...
    danke


Anmelden zum Antworten