AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TThread.Synchronize verwenden

Ein Thema von Manzoni · begonnen am 19. Feb 2004 · letzter Beitrag vom 22. Feb 2004
Antwort Antwort
Benutzerbild von Manzoni
Manzoni

Registriert seit: 15. Feb 2004
Ort: Berlin
120 Beiträge
 
Delphi 7 Enterprise
 
#1

TThread.Synchronize verwenden

  Alt 19. Feb 2004, 21:02
hi,

ich komme nicht weiter mit meinem Thread. Ich will gerne an eine Thread-Prozedur ein Parameter übergeben. Leider meldet Delphi dann immer
Code:
[Fehler] UThread.pas(100): Inkompatible Typen: 'TThreadMethod' und 'procedure, untyped pointer or untyped parameter'


Wie kann ich das realisieren?
Bob
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#2

Re: TThread.Synchronize verwenden

  Alt 19. Feb 2004, 21:06
Was noch nett wäre!

Die deklaration der Procedure und die stelle an der der Fehler entstand!
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: TThread.Synchronize verwenden

  Alt 19. Feb 2004, 21:25
Die Fehlermeldung besagt, dass eine Methode verlangt, aber ein gewöhnlicher Prozedurzeiger geliefert wurde.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Manzoni
Manzoni

Registriert seit: 15. Feb 2004
Ort: Berlin
120 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: TThread.Synchronize verwenden

  Alt 20. Feb 2004, 23:26
hi,

also die prozedur sieht so aus:
Delphi-Quellcode:
procedure TDatenTransfer.status(per : byte);
begin
  Form1.GProgress.Progress:=per;
end;
Der Fehler kommt hier:
Delphi-Quellcode:
...
Synchronize(status(0));
...
ich weiss net mehr weiter.
Bob
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: TThread.Synchronize verwenden

  Alt 20. Feb 2004, 23:29
Kuck mal in mein Thread-Tutorial, wie ich es gemacht habe: http://www.luckie-online.de/tutorials/threads/
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#6

Re: TThread.Synchronize verwenden

  Alt 21. Feb 2004, 00:01
synchronize kannst Du nicht mit paramentern aufrufen.
Wenn Du dies willst, musst Du eine Objectvariable anlegen, in der Deine informationen speichern, und dann in der status Procedure die Variablen benutzen.
  Mit Zitat antworten Zitat
Benutzerbild von Manzoni
Manzoni

Registriert seit: 15. Feb 2004
Ort: Berlin
120 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: TThread.Synchronize verwenden

  Alt 21. Feb 2004, 17:10
genau da liegt das Problem. Wenn ich die MainForm bewege, scheint der Thread auszusetzen!
Bob
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#8

Re: TThread.Synchronize verwenden

  Alt 21. Feb 2004, 18:26
synchronize unterbricht den Thread und führt alle Anweisungen im Haupthread auf.
Grund dieser Übung ist der, das die VCL nicht threadsicher programmiert wurde. Und zugriffe von zwei verschiedenen Threads zu unvollständig geschriebenen Variablen führen, und es dann meistens irgendwo abstürzt.
Threads werden in ihrer Ausführung von Windows einfach unterbrochen, auch wenn sie gerade eine "halbe" Variable geschrieben haben. Und wenn sie wieder eine Zeitscheibe bekommen machen sie dort weiter, wo sie aufgehört haben.
Mit einem einzigen Thread ist das natürlich kein problem, wenn aber ein zweiter Thread diese Variable dann benutzen will kommt es zu ungültigen nicht sinnvollen Werten.
Wenn Du aber mit einer eigenen Objectstruktur arbeitest, kannst Du diese Threadsicher gestalten.
(critical Sections usw.)

Ziel sollte also sein, die Anweisungen in synchronize so gering wie möglich zu halten.
(Denn dazu is ja sicherlich der Thread da, sonst hätte der Thread ja keinen Sinn)

Zitat von Manzoni:
Wenn ich die MainForm bewege, scheint der Thread auszusetzen!
da hast einen Fehler drin ..
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: TThread.Synchronize verwenden

  Alt 21. Feb 2004, 18:42
woher weiß0t du, dass der Thread anhält? Während du verschiebst wird wohl nichts mehr aktualisiert, weil das fenster gerade mit Neuzeichnen beschäftig ist und so die Fortschrittsanzeige nicht aktualisieren kann.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Manzoni
Manzoni

Registriert seit: 15. Feb 2004
Ort: Berlin
120 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: TThread.Synchronize verwenden

  Alt 22. Feb 2004, 03:38
hiho,

ich verwende im Thread ein ClientSocket um eine Datei zu versenden. Im Thread gibt es eine private Funktion, die den prozentualen Fortschritt berechnet. Die Prozedur Status soll dann diesen Wert auf die MainForm liefern. Funktioniert auch alles super, nur wenn ich die MainForm bewege während des sendens, kommt beim Server nicht alles an! Ich habe bereits probiert den Wert erst im Thread zu berechnen, diesen dann in einer privaten Variable zu speichern und diesen Wert dann in der Prozedur Status mit synchronize auszugeben. Ebenfalls habe ich in der Prozedur Status die Funktion direkt aufgerufen. Bei beiden Varianten gab es den Fehler. Deshalb will ich den Prozentwert jetzt als Parameter übergeben, was nicht funktioniert. Wo liegt der Fehler?
Bob
  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 23:03 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