AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TThread.Synchronize(MyMethod) bleibt hängen
Thema durchsuchen
Ansicht
Themen-Optionen

TThread.Synchronize(MyMethod) bleibt hängen

Ein Thema von lollipop1967 · begonnen am 27. Apr 2007 · letzter Beitrag vom 29. Apr 2007
Antwort Antwort
lollipop1967

Registriert seit: 27. Apr 2007
Ort: Remscheid
14 Beiträge
 
Delphi 2006 Enterprise
 
#1

TThread.Synchronize(MyMethod) bleibt hängen

  Alt 27. Apr 2007, 15:31
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

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

Hoffe jemand hat einen Rat.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: TThread.Synchronize(MyMethod) bleibt hängen

  Alt 27. Apr 2007, 15:46
Wo und wie rufst du synchronize auf?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#3

Re: TThread.Synchronize(MyMethod) bleibt hängen

  Alt 27. Apr 2007, 15:48
Es gibt Probleme wenn der Thread in einer DLL residiert.
  Mit Zitat antworten Zitat
lollipop1967

Registriert seit: 27. Apr 2007
Ort: Remscheid
14 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: TThread.Synchronize(MyMethod) bleibt hängen

  Alt 27. Apr 2007, 15:51
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)
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#5

Re: TThread.Synchronize(MyMethod) bleibt hängen

  Alt 28. Apr 2007, 11:00
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.
  Mit Zitat antworten Zitat
lollipop1967

Registriert seit: 27. Apr 2007
Ort: Remscheid
14 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: TThread.Synchronize(MyMethod) bleibt hängen

  Alt 28. Apr 2007, 21:01
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.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#7

Re: TThread.Synchronize(MyMethod) bleibt hängen

  Alt 29. Apr 2007, 05:59
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.
  Mit Zitat antworten Zitat
lollipop1967

Registriert seit: 27. Apr 2007
Ort: Remscheid
14 Beiträge
 
Delphi 2006 Enterprise
 
#8

Re: TThread.Synchronize(MyMethod) bleibt hängen

  Alt 29. Apr 2007, 17:10
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 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