AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Thread will nicht synchron schwimmen?

Ein Thema von Edlmann · begonnen am 28. Okt 2011 · letzter Beitrag vom 3. Nov 2011
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Thread will nicht synchron schwimmen?

  Alt 28. Okt 2011, 20:14
1. Das Verwenden von globalen Variablen ist fast immer falsch
2. Der Austausch von Thread-Status-informationen über eine globale Variable ... geht gar nicht
3. Eigenschaften in einem Thread einfach so zu ändern ein NoGo
4. Einen Thread in einer Endlosschleife zu parken ... besser so, dann kann man den auch mal vernünftig beenden
Delphi-Quellcode:
procedure MyThread.Execute;
begin
  while not Terminated do
    begin
      ...
    end;
end;
Schau dir mal hier im Forum die Informationen zum Thema Hier im Forum suchenThread und Hier im Forum suchenCriticalSection an.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Edlmann

Registriert seit: 19. Nov 2010
212 Beiträge
 
#2

AW: Thread will nicht synchron schwimmen?

  Alt 29. Okt 2011, 12:55
1. Das Verwenden von globalen Variablen ist fast immer falsch
2. Der Austausch von Thread-Status-informationen über eine globale Variable ... geht gar nicht
3. Eigenschaften in einem Thread einfach so zu ändern ein NoGo
4. Einen Thread in einer Endlosschleife zu parken ... besser so, dann kann man den auch mal vernünftig beenden
Delphi-Quellcode:
procedure MyThread.Execute;
begin
  while not Terminated do
    begin
      ...
    end;
end;
Schau dir mal hier im Forum die Informationen zum Thema Hier im Forum suchenThread und Hier im Forum suchenCriticalSection an.
Vielen Dank schonmal, damit ist wenigstens der Stil schonmal besser
Das mit den globalen Variablen und dem not Terminated ist mir auch direkt nach dem Posten aufgefallen, ist schon geändert. Funktioniert allerdings noch immer nicht.

Was genau meinst du mit Punkt 3?
  Mit Zitat antworten Zitat
grl

Registriert seit: 5. Feb 2007
174 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Thread will nicht synchron schwimmen?

  Alt 29. Okt 2011, 16:41
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 Renderpartikel und Movepartikel definiert? Sind das lauter Thread-Safe implementierte Dinge?

Ich stell jetzt einfach mal eine Vermutung in den Raum: in Renderpartikel oder Movepartikel machst du einen VCL-Zugriff und das kracht...

Gruß
Luggi
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: Thread will nicht synchron schwimmen?

  Alt 29. Okt 2011, 20:57
Lustig, wenn man 'Workerthread' in die Suchfunktion eingibt, findet man sogar was.
  Mit Zitat antworten Zitat
Edlmann

Registriert seit: 19. Nov 2010
212 Beiträge
 
#5

AW: Thread will nicht synchron schwimmen?

  Alt 29. Okt 2011, 22:42
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 Renderpartikel und Movepartikel definiert? Sind das lauter Thread-Safe implementierte Dinge?

Ich stell jetzt einfach mal eine Vermutung in den Raum: in Renderpartikel oder Movepartikel machst du einen VCL-Zugriff und das kracht...

Gruß
Luggi
RenderPartikel => Boolean der bestimmt ob Partikeleffekte Gerendert werden sollen
MovePartikel => Arbeitet eine TList mit Partikeln durch, auf die der VCL-Thread nicht zugreift. Somit ist eine CriticalSection nicht nötig.
Ich versteh auch nicht wieso es nicht funktioniert, seit ich die beiden Booleans Fin und HasJob in die klasse des Threads verlagert hab kommen nur AV's bei jedem Aufruf...werd ich mir Morgen in wachem Zustand alles nochmal zu Gemüt führen und nach dem Fehler suchen...das ist das erste Mal das ich Threads benutze, doch eigentlich dachte ich ich hätte genug Tutorials durch um das ganze einigermaßen zu verstehen...mal wieder Fehlanzeigen

Lustig, wenn man 'Workerthread' in die Suchfunktion eingibt, findet man sogar was.
Ja, darauf bin ich auch gestoßen. Ist aber ziemlicher Overkill für meine Anwendung.
  Mit Zitat antworten Zitat
grl

Registriert seit: 5. Feb 2007
174 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Thread will nicht synchron schwimmen?

  Alt 30. Okt 2011, 00:17
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
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#7

AW: Thread will nicht synchron schwimmen?

  Alt 30. Okt 2011, 01:59
Hi,

erst möchte ich dir mal etwas Lesestoff geben: http://wiki.delphigl.com/index.php/S...mlung#Partikel

Dann zu deinem Threadproblem: Bei einem Partikelsystem fallen imho einige Beschränkungen weg, die bei normalen Aufgaben bestehen. Es sollte reichen sicherzustellen das nur ein Thread in ein Partikel schreibt. Das kannst du machen indem du zB jedem Partikelbuffer einem Thread zuteilst und die neuertstellten Partikel auf die Buffer verteilst (das musst du dann synchronisieren, wenn du aber im Thread keine Partikel erstellst, sollte zB das suchen toter Partikel auch asynchron möglich sein). Da es aber nicht schlimm ist, wenn mal ein Partikel ein paar Pixel daneben gezeichnet wird, musst du das Auslesen der Buffer zum Zeichnen nicht synchronisieren.

Die einzige Schwierigkeit sehe ich darin die Zeiten zu synchronisieren, da Partikel aber nur Grafik sind muss auch das nicht perfekt sein.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Edlmann

Registriert seit: 19. Nov 2010
212 Beiträge
 
#8

AW: Thread will nicht synchron schwimmen?

  Alt 30. Okt 2011, 15:25
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
Wird schwierig, ich werds aber mal versuchen, da was kompilierbares auf die Beine zu stellen.

Hi,

erst möchte ich dir mal etwas Lesestoff geben: http://wiki.delphigl.com/index.php/S...mlung#Partikel

Dann zu deinem Threadproblem: Bei einem Partikelsystem fallen imho einige Beschränkungen weg, die bei normalen Aufgaben bestehen. Es sollte reichen sicherzustellen das nur ein Thread in ein Partikel schreibt. Das kannst du machen indem du zB jedem Partikelbuffer einem Thread zuteilst und die neuertstellten Partikel auf die Buffer verteilst (das musst du dann synchronisieren, wenn du aber im Thread keine Partikel erstellst, sollte zB das suchen toter Partikel auch asynchron möglich sein). Da es aber nicht schlimm ist, wenn mal ein Partikel ein paar Pixel daneben gezeichnet wird, musst du das Auslesen der Buffer zum Zeichnen nicht synchronisieren.

Die einzige Schwierigkeit sehe ich darin die Zeiten zu synchronisieren, da Partikel aber nur Grafik sind muss auch das nicht perfekt sein.
Hab ich mir schon durchgelesen, das GPU-System ist mir noch deutlich zu hoch, und das für ältere Hardware hilft mir beim meinem Problem nicht weiter, so ähnlich arbeitet mein System schon

Durch Studium des Overkills hättest Du Einiges an Problemen bei deiner Implementierung vermieden.
Nein, nicht wirklich. Ich habe die Basis-Struktur von Threads schon verstanden und auch des öfteren schon benutzt (z.B. bei nem Downloader), bekomme nur die Synchronisation nicht vernünftig hin...
  Mit Zitat antworten Zitat
Edlmann

Registriert seit: 19. Nov 2010
212 Beiträge
 
#9

AW: Thread will nicht synchron schwimmen?

  Alt 30. Okt 2011, 15:40
Hab jetzt das Threading in eine externe Anwendung übertragen, die jetzt nur das Partikelsystem und den Thread enthält...läuft allerdings selbst in dieser Umgebung nicht so wie ich das will...
Download: http://dl.dropbox.com/u/12342503/ParticleSystem.rar
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#10

AW: Thread will nicht synchron schwimmen?

  Alt 30. Okt 2011, 10:18
Lustig, wenn man 'Workerthread' in die Suchfunktion eingibt, findet man sogar was.
Ja, darauf bin ich auch gestoßen. Ist aber ziemlicher Overkill für meine Anwendung.
Durch Studium des Overkills hättest Du Einiges an Problemen bei deiner Implementierung vermieden.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz