Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Thread Problem (https://www.delphipraxis.net/44836-thread-problem.html)

DerAndereMicha 25. Apr 2005 15:32


Thread Problem
 
Ich habe folgendes Problem. Ich führe innerhalb eines separaten Threads SQL-Befehle aus. Um evt. Parameter eingeben zu können, erzeuge ich eine Form zur Eingabe.

Mein Problem ist nun, daß dieses Prinzip auf allen PCs unserer Firma funktioniert, aber auf einem Server eines Kunden von uns, welcher eine Dual-Prozessor Maschine ist, nicht. Dort werden unter Umständen, die nicht nachvollziehbar sind, entweder alle Controls der Eingabeform gezeichnet oder die Form bleibt komplett leer.

Ich verwende zur Erzeugung des Threads nicht das TThread-Objekt von Delphi, sondern die Funktion BeginThread, damit steht mir die Synchronize-Methode von der ich im Zusammenhang mit solchen Fehlern schon in diversen Beiträgen gelesen habe, auch nicht zur Verfügung.

Ich hoffe jemand kann mir dieses Verhalten erklären und hat evt. auch eine Lösung parat.

Mephistopheles 25. Apr 2005 15:34

Re: Thread Problem
 
Wie synchronisierst du denn deine Threads aktuell? Critical Sections, Semaphoren, Mutanten?

DerAndereMicha 25. Apr 2005 15:41

Re: Thread Problem
 
Gar nicht, glaube ich jedenfalls. Der SQL-Befehl wird im Thread ausgeführt und wenn er beendet ist (ich frage
im Haupt-Thread den Status ab) kann ich erst wieder auf die Controls in der Hauptform zugreifen.

Vjay 25. Apr 2005 16:03

Re: Thread Problem
 
Nachdem dein Thread alle Abfragen gemacht hat, schickst du dir per PostMessage eine Nachricht zum Hauptform. In der Nachrichtenbehandlungsroutine schaltest du dann deine Komponenten wieder frei.

Evtl. musst du noch die Variable (Is?)MultiThreaded auf true schalten, da du an der VCL vorbeiprogrammierst.

DerAndereMicha 26. Apr 2005 07:23

Re: Thread Problem
 
Das Problem tritt schon vor der Abfrage auf. Das Fenster in die ich
die Parameter eingeben möchte, wird vom abgespaltenen Thread geöffnet
bevor ich die Abfrage ausgeführt wird und anscheinend nicht immer
richtig gezeichnet. Meine Frage war, warum das Fenster meistens aber
nicht immer, völlig ohne Controls erscheint.

Sanchez 26. Apr 2005 08:51

Re: Thread Problem
 
Hallo,
Die VCL ist nicht threadsicher. Wenn du aus einem anderen Thread außer dem Hauptthread auf VCL-Komponenten zugreifst kann durchaus alles funktionieren, muss aber nicht. Es ist mehr oder weniger ein Glücksspiel. Das dein Problem gerade auf einer Dual-Prozessor-Maschine auftritt ist eigentlich nachvollziehbar.

In deinem Thread solltest du nicht aufs Formular zugreifen, sondern am Schluss oder ggf. auch zwischendurch mal das Formular im Kontext des Hauptthreads aktualisieren. Den Weg hat dir Vjay schon beschrieben.

grüße, daniel

DerAndereMicha 26. Apr 2005 10:43

Re: Thread Problem
 
Das mit dem Neuzeichnen aus dem Kontext des Hauptthreads heraus schien mir ein guter und einfacher Ansatzpunkt zu sein. Ich habe es allerdings erstmal zum Test ohne Messages gemacht sondern über nen Timer der aller Sekunden schaut ob die Form assigned ist und die Form dann mittels
Repaint neuzeichnen lassen. Leider hat das nix geholfen...

Luckie 26. Apr 2005 10:44

Re: Thread Problem
 
Guck dir mal besser mein Tutorial zu Threads an: http://tutorials.luckie-online.de

DerAndereMicha 26. Apr 2005 10:48

Re: Thread Problem
 
@Lucki: Du wirsts mir sicherlich nicht glauben, aber das liegt neben mir. Ich hab es mir schon 3mal
komplett durchgelesen, finde aber keinen Ansatzpunkt :-(

Sanchez 26. Apr 2005 10:58

Re: Thread Problem
 
Zitat:

Zitat von DerAndereMicha
Das mit dem Neuzeichnen aus dem Kontext des Hauptthreads heraus schien mir ein guter und einfacher Ansatzpunkt zu sein.

Das ist nicht der springende Punkt. Du solltest aus deinem Thread heraus möglichst überhaupt nicht auf das Formular oder Komponenten des Formulars zugreifen.

Zurzeit setzt du irgendwelche Properties im Thread und bringst den Haupthread dazu das Form zu zeichnen, oder? Du solltest den Haupthread dazu bringen, die verschiedenen Properties zu setzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:24 Uhr.
Seite 1 von 2  1 2      

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-2025 by Thomas Breitkreuz