![]() |
Thread-Probleme
Morgen.
Ich hab hier grad ein paar richtig fiese Probleme. Wenn ich das richtig verstanden habe, laufen Indy-Server-Sockets in einem eigenen Thread. Dieser Thread ruft beim Dateneingang das Ereignis OnExecute auf, beim Connecten und Disconnecten auch bestimmte Ereignisse. Soo, und jetzt kommts: Ich will beim Disconnecten eine MessageBox anzeigen. Das Problem: showmessage ist ja mehr oder weniger eine GUI-Funktion und die soll man nunmal nur aus dem Hauptthread heraus aufrufen. Das sorgt natürlich dafür, dass meine Anwendung recht unschön mit diversen Exceptions röchelnd zugrunde geht. Genauergesagt, verschiedene Canvasses beschweren sich, dass ich nicht auf sie zeichnen darf oder sie zeichnen einfach an bestimmten Stellen ziemlichen Mist, der da eigentlich nichts verloren hat. Wie verhindere ich das am besten? |
Re: Thread-Probleme
ShowMessage aus einem Synchronize heraus aufrufen bzw. GUI kann man auch aus nem Thread heraus aufrufen, mit ShowMessage hatte ich noch keine Probleme, die kommen eher mit den VCL Komponenten des Hauptthreads.
|
Re: Thread-Probleme
Dieser Thread wird von den Indys kontrolliert...
Ich kann ihn nicht synchronisieren. Aber wenn ShowMessage noch geht, ist es ja in Ordnung... Trotzdem habe ich recht seltsame Probleme mit dem Neuzeichnen. |
Re: Thread-Probleme
Deffiniere.
Es kann aber auch an Delphis Struktur liegen, weil die Handles sich ständig ändern. Besonders beim Zeichnen in den Threads kenne ich diese Probleme, deshalb erstelle ich dafür eigene Canvas und Bitmaps, damit ich die Handles kontrollieren kann. |
Re: Thread-Probleme
Ich zeichne eigentlich nur im Hauptthread. Das Problem an der Sache ist nur, dass mir das Ding in meinem Canvas seltsamerweise EInvalidOperations liefert oder für einen Augenblick ohne ersichtlichen Grund ein lila Quadrat zeichnet.
|
Re: Thread-Probleme
Die Kompo selber zeichnet irgendwas irgendwo hin?
|
Re: Thread-Probleme
Ja, die hab ich geschrieben. :mrgreen:
Und die überzeichnet sich kurzzeitig selbst teilweise mit lila Farbe. |
Re: Thread-Probleme
Schon probiert, auf einem extra DC zu Zeichnen, bzw. dieses immer vor dem Zeichnen zu "holen" und danach zu "entlassen" (GetDC, ReleaseDC)?
Das hilft da meistens. |
Re: Thread-Probleme
Warum?
Ich zeichne nur in der Paint-Methode meiner Komponente. |
Re: Thread-Probleme
Weil, wenn in Threads gezeichnet wird da manches mal Probleme auftreten.
Jedenfalls ist das meine Erfahrung, nicht Delphi Handles zu verwenden um die Fehler zu vermeiden. |
Re: Thread-Probleme
Ich zeichne ja gar nicht in Threads.
|
Re: Thread-Probleme
Irgendwas verstehe ich dann nicht richtig. :gruebel:
Deine Kompo funktioniert, wenn Du sie in einer extra Anwendung probierst ohne die Indy Kompo? |
Re: Thread-Probleme
Sie funktioniert, solange ich die showmessages in den Indy-Threads rauslasse.
|
Re: Thread-Probleme
Du könntest Dir eine WM_User per PostMessage aus dem Thread schicken, diese in der WndProc abfangen und dort die Nachricht anzeigen, damit würde ShowMessage als Eigner des Hauptthreads angezeigt werden.
|
Re: Thread-Probleme
Moin Manuel,
irgendwie ist mir der Aufbau nicht klar. Verwendest Du jetzt die Indys als Komponenten auf Deinem Formular, oder benutzt Du sie in einem Thread? |
Re: Thread-Probleme
@Sunlight: Guuute Idee. Ich probiers mal aus.
@Christian: Ich verwende sie als Komponenten auf meinem Formular. Eigene Threads definiere ich nicht. Aber die Indys verwenden eigene Threads, dass kann man recht leicht über den CallStack herausfinden. |
Re: Thread-Probleme
Du könntest such die API-Funktion MessageBox verwenden, die du nicht synchonisiern brauchst ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz