Zitat von
iaby:
ich dachte allerdings, dass die execute prozedur schon beim erstellen des objekts per create ausgeführt wird. nach langem probieren habe ich dann herausgefunden, dass es mit Thread.resume geht! woran liegt das?
Der Paremeter "CreateSuspended" des Constructors gibt an, ob der Thread sofort mit seiner Ausführung beginnen soll, oder ob er gleich am Anfang "suspendiert" (also angehalten) werden soll. Ist CreateSuspended True, so wird der Thread angehalten und du musst ihn manuell per Resume wieder fortsetzen. Das ist dann sinnvoll, wenn du nach dem Erzeugen des Threads noch ein paar Initialisierungen o.ä. durchführen musst.
Zitat:
Thread.free brauche ich ja nicht zu machen( wie ich das bei luckie's tutorial gelesen hab)!?!
Sofern du FreeOnTerminate auf True setzt nicht...
Edit: @Luckie: hab mir dein Demo auch mal angeschaut.. was mir aufgefallen ist:
Delphi-Quellcode:
private
{ Private-Deklarationen }
// Demio-Zähler
FCount: Integer;
// globale Variablen zum Synchronisieren
XIndex: Integer;
XCount: Integer;
{...}
UpdateValues(Loop, FCount);
{...}
procedure TMyThreads.UpDateValues(Index, Count: Integer);
begin
// globale Variable zuweise, da der Synchronize Methode keine Variablen
// übetgeben werden können.
XIndex := FIndex;
XCount := FCount - 1;
// Synchronize Methode aufrufen
Synchronize(UpDateLVCaption);
end;
procedure TMyThreads.UpDateLVCaption;
begin
// Synchronize Methode mit globalen Variablen
Form1.UpdateLVCaption(XIndex, XCount);
end;
1) Wozu übergibst du der Methode UpdateValues zwei Parameter wenn diese innerhalb der Methode überhaupt nicht verwendet werden?
2) Wozu führst du die beiden privaten Felder XIndex und XCount ein wenn du stattdessen genausogut FIndex und FCount für UpdateLVCaption verwenden könntest?
Edit2: 3) Wozu rufst du die Methode UpdateValues per Synchronize auf?