Forum: Object-Pascal / Delphi-Language
Delphi
by dizzy,
30. Jul 2004
// etwas hübscher: ;)
procedure TSound.CheckPlay;
begin
if (PlayMusikIndex > -1) and (isRandom = False) then
begin
if ((Musik.Module <> NIL) and (FMUSIC_IsFinished(Musik.Module) = True)) or
((Musik.Stream <> NIL) and (FSOUND_IsPlaying(Musik.Channel) = False)) then randomMusik;
end;
end;
Forum: Object-Pascal / Delphi-Language
Delphi
by dizzy,
30. Jul 2004
Wenn z.B. in der Methode "onE" eine Zeile: "Form1.Memo1.Lines.Clear;" vorkommt, dann schreib dir dafür eine eigene Methode - z.B.:
procedure TMyThread.ClearLines;
begin
Form1.Memo1.Lines.Clear;
end;
und in der Methode "onE" dann aufrufen mit:
Forum: Object-Pascal / Delphi-Language
Delphi
by dizzy,
30. Jul 2004
Ist auch logisch ;). Das Synchronized veranlasst, dass die Methode im Hauptthread der Anwendung ausgeführt wird! Deshalb kann man sich, so wie du es einsetzt, so alle Vorteile von einem Thread mit einem Schlag zu Nichte machen.
Du solltest INNERHALB deiner Methode alle Zugriffe die auf andere Threads passieren EINZELN Synchronized machen, nicht die ganze Methode!
Solche Synchronized-Aufrufe...
Forum: Object-Pascal / Delphi-Language
Delphi
by dizzy,
30. Jul 2004
Wenn du aus deinem Thread heraus auf Properties und Variablen eines anderen Threads (z.B. Controls auf dem Formular) zugreifst, so müssen diese Zugriffe synchronisiert werden. Die Zeilen die den Zugriff machen musst du in eine eigene Methode deiner Threadklasse packen, und mit Synchronize(MethodenName); aufrufen. Sonst kann es knallen.
gruss,
dizzy