Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Thread-Probleme (https://www.delphipraxis.net/79389-thread-probleme.html)

3_of_8 21. Okt 2006 15:24


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?

Sunlight7 21. Okt 2006 18:44

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.

3_of_8 21. Okt 2006 18:47

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.

Sunlight7 21. Okt 2006 18:53

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.

3_of_8 21. Okt 2006 18:59

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.

Sunlight7 21. Okt 2006 19:12

Re: Thread-Probleme
 
Die Kompo selber zeichnet irgendwas irgendwo hin?

3_of_8 21. Okt 2006 19:28

Re: Thread-Probleme
 
Ja, die hab ich geschrieben. :mrgreen:

Und die überzeichnet sich kurzzeitig selbst teilweise mit lila Farbe.

Sunlight7 21. Okt 2006 19:38

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.

3_of_8 21. Okt 2006 19:41

Re: Thread-Probleme
 
Warum?

Ich zeichne nur in der Paint-Methode meiner Komponente.

Sunlight7 21. Okt 2006 19:51

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.

3_of_8 21. Okt 2006 19:54

Re: Thread-Probleme
 
Ich zeichne ja gar nicht in Threads.

Sunlight7 21. Okt 2006 20:00

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?

3_of_8 21. Okt 2006 20:10

Re: Thread-Probleme
 
Sie funktioniert, solange ich die showmessages in den Indy-Threads rauslasse.

Sunlight7 21. Okt 2006 20:23

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.

Christian Seehase 22. Okt 2006 00:27

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?

3_of_8 22. Okt 2006 08:40

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.

jfheins 22. Okt 2006 12:06

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 09:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz