![]() |
TThread.Synchronize(MyMethod) bleibt hängen
Hallo,
ich habe da ein Problem mit der Umstellung von Delphi 4 auf Delphi 2006. Ich bekomme alles übersetz, aber TThread.Synchronize(MyMethod) bleibt hängen. Wenn ich den Debugger untergbreche stehe ich in User32.WaitMessage. Erst wenn ich mein Programm, und damit den Thred beende komme ich in MyMethod an :wall: in Delphi 4 kam ich direkt nach TThread.Synchronize(MyMethod) in die Methode MyMethod. Was ist nun habe ich falsch gemacht, bzw. was hat sich bei den Threads geändert :gruebel: Hoffe jemand hat einen Rat. |
Re: TThread.Synchronize(MyMethod) bleibt hängen
Wo und wie rufst du synchronize auf?
|
Re: TThread.Synchronize(MyMethod) bleibt hängen
Es gibt Probleme wenn der Thread in einer DLL residiert.
|
Re: TThread.Synchronize(MyMethod) bleibt hängen
Ich rufe es im execute aus und die Thread's sind in einer DLL
(Ich lese Werte von der Seriellen Schnittstelle, und nach jedem cr lf möchte ich per synchronize die werte einem anderen Thread übergeben) |
Re: TThread.Synchronize(MyMethod) bleibt hängen
Das Problem ist das die DLL nicht mit dem Hauptprogramm voellig verbunden ist.
Insbesondere der Messageflow ist problematisch und die Synchronisierung erfolgt durch Messages. Weise mal in der DLL Application.Handle mit dem Wert von Application.Handle zu. Dazu musst du vom Hauptprogramm eine Funktion in der DLL aufrufen und den Fensterhandle uebergeben. Hauptprogramm und DLL haben naemlich separate Application-Variablen. |
Re: TThread.Synchronize(MyMethod) bleibt hängen
Unter Delphi 4 funktionierte das Programm problemlos, erst seit der Umstellung
auf Delphi 2006 habe ich dieses Problem. Das Hauptprogramm startet die DLL mit InitMyFunction und fragt nach einer gewissen Zeit nach, ob ein Wert über die Schnittstelle angekommen ist. Das heißt, die Threads der DLL sollten eigentlich nichts mit dem Hauptprogramm zu tun haben, und eigenständig die Schnittstelle beobachten. |
Re: TThread.Synchronize(MyMethod) bleibt hängen
Es gab Updates in der Thread-Implementierung. Synchronize synchronisiert zum Hauptthread des Programms. Von Thread zu Thread geht da garnichts.
Stell doch mal vor was du machst. |
Re: TThread.Synchronize(MyMethod) bleibt hängen
Mein Hauptprogramm lädt die DLL und startet mit init meine Thread's
Der Hauptthread liest alles, was über die RS232 kommt und bei einem cr lf reicht er die Werte mittels synchronize an einen anderen Thread weiter, dem er diese empfangenen Werte übergibt und welcher diese verarbeitet. Der Haupthread liest wieder alles was über die Schnittstelle kommt, und reicht dies ggf. wieder weiter. Mein Hauptprogramm fragt die DLL in einem Timer, ob schon die gewünchten Werte angekommen sind. Wie gesagt unter Delphi4 funktionierte das auch ohne Probleme, nur nach meinem update bleibt der Thread beim Synchronize stehen ohne den 2. Thread über die eingegangenen Daten zu informieren, erst wenn ich das Hauptprogramm beende (damit auch den Thread) wird myMethod durch Synchronize(myMethod) aufgrufen, somit gehen mir alle Daten verloren, bzw. die DLL sagt immer sie habe noch nichts empfangen :wall: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 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