Threads , Borland und Ausgaben....??

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Threads , Borland und Ausgaben....??

    Hallo Leute,

    ich habe einen Thread parallel zu meinem Hauptprogramm laufen...
    Nun habe ich folgendes Problem:

    In dem Thread werden Daten an den Rechner gesendet.
    Und parallel dazu will ich in dem Thread Ausgaben auf dem
    Bildschirm erzeugen.

    Doch leider funktionieren diese Ausgaben nicht !
    Er bleibt dann hängen und es geht nix mehr ....

    Ich kann z.B. keine Windows Fensteraufrufen:
    MessageDlg( "Fehler.", mtError, TMsgDlgButtons() << mbOK, 0 );

    oder irgendwelche einfachen Ausgaben :
    MainForm->ComAusgabeLabel->Caption = "Searching for ....";

    Kann es sein das ich dem Thread noch irgendwas bekannt geben muss ??
    Ich benutze den normalen Windows Thread...

    " UTHREADPROC ThreadRx( void *p ) "
    das ist der Kopf.

    wäre sehr schön wenn da jemand weiter wüßte,
    bin nämlich mit meinem Projekt fertig und das ist das letzte Problem.

    thx
  • Wenn Daten gesendet werden klingt das so, als würde eine Socket-API blocken und keine Befehle annehmen.
    Bleibt er bei der Ausgabe hängen oder bei was anderem?
    Das üblich Paradigma ist, dass es immer nur einen UI-Thead gibt.
    K.A. ob das bei Borland auch so ist, geh aber mal davon aus (schau einfach ob in der Doku irgendwas von "thread safe" oder "synchronized" steht).
    Ansonsten musst im 2. Thread eine Variable des ersten Threads anpassen, sodass dieser die Ausgabe vornimmt.

    hth
  • Thread2 sagt zu Thread1 "Speichere den String 'tu was' in der globalen Variablen X"

    Thread1 checkt im MessageLoop ob die Variable X nicht null.
    Wenn ja, dann wird MainForm->Label->Caption = X; gerufen und X wieder auf null gesetzt.
    Ist aber eine kranke Lösung. Sicherer ist es zumindest wenn du statt der Variablen "X" eine List<String> verwendest, in die du hinten anfügst und vorne ausliest.
    Ich weiß nicht in wie weit du in den MessageLoop eingreifen kannst/willst.

    Ansonsten lässt sich das doch sicher mit einem schönen benutzerdefinierten Event lösen, der von Thread 1 bearbeitet wird, oder????

    hth