Ich verstehe nicht an welcher Stelle ich aus beiden Threads etwas zugreifen soll...Der
VCL-Thread berechnet die Spiellogik, der Worker die Partikel-Engine (
VCL-Thread greift nicht auf die Partikel zu), nur beim Rendern liest der
VCl-Thread die Werte der Partikel aus, ändert diese aber nicht. Auf den Workerthread warten hab ich eingebaut, damit der Worker auf jeden Fall beim nächsten Frame fertig mit seinem Durchlauf ist, und wieder weiter arbeiten kann. Da der Mainthread im Spiel genug zu tun hat bis dahin, sollte diese Warteschleife im Spiel nur selten aufgerufen werden, doch das schützt (zumindest in meiner eigenen kleinen Welt, in der Threads funktionieren wie ich denke
) davor, dass Einzelschritte übersprungen werden beim Partikelsystem.
Der WorkerThread macht ein
TParticleSystem(PSystem).Update;
in dem z.B. ein
Parts.Count
und ein
Parts.Items[x]
vorkommt, und der MainThread macht
ASystem.AddPartikels(OldX, OldY, Emit_SB.Position)
das dazu führt, daß die Anzahl Parts sich ändert.
Das ist nur ein beispiel - und wegen dem Timer-Problem bist du evtl. noch im MainThread im Render (das auch ein Parts.Count verwendet) während der Timer schon den nächsten Thread angeworfen hat - dann krachts gleich wieder.
Gruß
Luggi