![]() |
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. |
Re: Thread Problem
Wie synchronisierst du denn deine Threads aktuell? Critical Sections, Semaphoren, Mutanten?
|
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. |
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. |
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. |
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 |
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... |
Re: Thread Problem
Guck dir mal besser mein Tutorial zu Threads an:
![]() |
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 :-( |
Re: Thread Problem
Zitat:
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. |
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