Einzelnen Beitrag anzeigen

Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: multithreading funktioniert nicht

  Alt 12. Jun 2007, 06:36
Hallo

if Form1.CB1.Checked=true then Überprüfe nicht auf = true. Das mag hier zwar gehen, ist jedoch schlecht, sich das so anzugewöhnen. Wieso, steht hier und das ist ganz interessant und sollte man wissen. Mit deinem Problem hat dies allerdings nichts zu tun.

Du greifst jedoch im Thread (Execute) direkt auf die VCL zu beim Ansprechen der CheckBoxen und das ist alles andere als gut. Genauso beim TMediaPlayer. Der Zugriff auf die VCL aus einem Thread sollte generell nur mittels Delphi-Referenz durchsuchenSynchronize erfolgen. Hierzu findest du auch einige Beispiele in der DP. Ich könnte mir vorstellen, dass dies mit deinem Problem zusammenhängt.

Mir persönlich erscheint es auch nicht sinnvoll, in jedem Schleifendurchlauf zu prüfen, welche CheckBox nun gesetzt ist, denn das kostet auch nur Rechenzeit, jedesmal auf die VCL zugreifen zu müssen. Vielleicht wäre es auch sinnvoll, einzulesen, welche CheckBoxen gesetzt sind und den Thread dann mit entsprechenden Parametern zu starten, es sei denn, man soll während des Threads auch eine CheckBox anklicken dürfen und die Änderungen direkt übernommen werden müssen.

Falls das ganze für eine Visualisierung sein soll, tust du dir sicher leichter, wenn du die bass.dll nutzen würdest. Für diese dll gibt es einige Units und Beispiele in der DP, mit denen sich diese sehr einfach ansprechen lässt. Visualisierungen sind damit ein Kinderspiel.
Eine nette Übung ist es natürlich, selbst eine zu schreiben, das ist keine Frage.
  Mit Zitat antworten Zitat