Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by grl,
3. Nov 2011
Sorry, war grad unterwegs, daher gibts erst jetzt eine Antwort.
Erst mal: Ich denke, es gibt noch einen weiteren Grund für Threads: und zwar einfach Abläufe sauber gegeneinander abzuschotten. Das erhöht meiner Meinung nach die Stabilität und die Transparenz (wenn auch zum Preis eines höheren Implementationsaufwandes und der Gefahr, vor lauter Threads unnötig Ressourcen im Overhead zu...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by grl,
31. Okt 2011
*grins* Also ich kenn kein Projekt, bei dem die Einführung von Multithreading KEINE starke Umstrukturierung erfordert.
Naja - du stellst aber nicht sicher, daß während der Thread läuft nicht schon der nächste Timer daher kommt (was auch tatsächlich der Fall ist) - und das "kracht".
Außerdem - ich glaub da wiederhol ich mich - macht deine Implementation so generell keinen Sinn - denn ob du...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by grl,
30. Okt 2011
Der WorkerThread macht ein TParticleSystem(PSystem).Update; in dem z.B. ein Parts.Count und ein Parts.Items 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...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by grl,
30. Okt 2011
Gern!
Ich glaub nicht - denn egal was du auch erreichen willst - das was du da zusammengebastelt hast, kann nicht funktionieren.
Dann hab ich dich schon richtig verstanden. Das machst du hier aber nicht - denn du wartest auf den Thread und damit läuft er nicht parallel.
Mal dir das mal auf - in einem Ablaufdiagramm oder so - dann siehst du das besser.
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by grl,
30. Okt 2011
Also, da ist einiges ziemlich schräg... *grins*
Fangen wir mal beim Thread selber an:
procedure TWorkerthread.Execute;
begin
while True do //<- wie schon mal gesagt: sollte while not Terminated do heissen...
begin
if HasJob then //<- nur als Anmerkung: mit ein paar einrückungen würde es leichter zum lesen gehen...
begin
Fin := False;
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by grl,
29. Okt 2011
Edlmann,
ich kanns nur nochmal sagen - stell ein compilierbares, vollständiges Beispiel ein, bei dem man den Effekt sehen kann. Dann können wir dir sicher helfen.
Nachdem meine Kristallkugel im Wochenende ist, ist es sonst extrem schwierig.
Gruß
Luggi
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by grl,
29. Okt 2011
Edlmann,
also, mal abgesehen von dem was Sir Rufo schon angeführt und der Tatsache, daß du keinerlei Synchronisation hast (Stichwort CriticalSection), sollte das schon irgendwie hinhauen.
Um da einen Fehler zu finden musst du uns schon mit vollständigem Sourcecode füttern.
Mach mal was wirklich kompilierbares (was z.B. ist das NotifText und NotifTime, wozu sind die gut?) und wo ist...