Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

FlyingDragon

Frischling

  • »FlyingDragon« ist der Autor dieses Themas

Beiträge: 38

Wohnort: Sachsen

Beruf: Consultant / Software Architekt

  • Private Nachricht senden

31

10.11.2006, 21:17

Ich hab mal in der Zwischenzeit zu meinem letzen Beitrag ein kleines Projekt mit einer Thread-KLasse und einer CriticalSection-Klasse gestartet. Ich bin für Kritik sehr dankbar. Hier der Link: http://dragon.w031.de/trash/threading.zip

Zitat

Was mich vor allem interessieren würde ist, ob einfache Getter und Setter gesperrt werden sollten. Eigentlich doch eher nicht oder, bei einer Anweisung?

Kommt drauf an. Bei den Standardvariablen und Zeigern würde ich keine Bedenken haben. Problematisch kann es bei Stings werden. Da diese Zeichenweise mit einer Schleife kopiert werden. Aber bei get-Methoden sollten man eigentlich kein Problem haben.
Achtung! Das Lesen dieses Beitrags kann Ihnen und den Menschen in ihrer Umgebung erheblichen Schaden zufügen.
___________
Mein Leben, Freunde und die Spieleentwicklung

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

32

11.11.2006, 04:07

WaitForThread fehlt noch. Die Methoden der Klasse CriticalSection würde ich so wie sie jetzt sind durchweg als inline definieren, wobei man hier sich über den Sinn der Kapselung streiten kann.
static DWORD WINAPI threadproc(void*); würde ich wohl ersetzen durch LPTHREAD_START_ROUTINE threadproc; und start gegebenfalls auch um den entsprechenden Zeiger erweitern. Bzw. ist es fraglich, ob man dann noch den Zeiger in der Klasse braucht. Alternativ kann man die threadproc auch dem Konstruktor schon übergeben.

Interessant wäre auch ein Nachrichtensystem, welches zur Kommunikation zwischen Thread und Hauptthread und/oder andere Threads ermöglich. Die lässt sich z.B. über eine Callback-Funktion + Threadingsichere Liste machen.

Zum Thema Zeiger folgender Gedankengang:
Hauptthread: wenn ein Zeiger gültig ist und greift der Thread auf ihn zu
Nebenthread: erstellt ein neues Objekt und speichert die Adresse direkt im Zeiger, löscht es dann wieder und setzt den Zeiger dannach auf NULL.

Was ist nun wenn der Nebenthread den Zeiger erstellt und wieder gelöscht hat, der Hauptthread dann wieder die Kontrolle bekommt und den Zeiger prüft, der zwar gelöscht aber nicht genullt wurde?

Generell gilt eigentlich beim Threading(meine personliche Erfahrung, nicht mehr): Möglichst wenig Objekte haben, die von unterschiedlichen Threads erreicht werden können. Dies mag zwar manchmal zu einen gewissen Overhead führen, aber jeder Lock-Aufruf kostet mehr Zeit als ein gut strukturierter Overhead.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

33

11.11.2006, 08:09

K, thx :) Gibts eine Möglichkeit zu Überprüfen ob ein anderer Thread noch läuft? Im Moment hängt sich mein Progi immer auf, sobald ein Thread unerwartet endet.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

34

11.11.2006, 11:08

GetExitCodeThread
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

35

11.11.2006, 20:11

Jo geht, danke!

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

36

24.11.2006, 10:46

Zitat von »"FlyingDragon"«

Ich hab mal in der Zwischenzeit zu meinem letzen Beitrag ein kleines Projekt mit einer Thread-KLasse und einer CriticalSection-Klasse gestartet. Ich bin für Kritik sehr dankbar. Hier der Link: http://dragon.w031.de/trash/threading.zip

Zitat

Was mich vor allem interessieren würde ist, ob einfache Getter und Setter gesperrt werden sollten. Eigentlich doch eher nicht oder, bei einer Anweisung?

Kommt drauf an. Bei den Standardvariablen und Zeigern würde ich keine Bedenken haben. Problematisch kann es bei Stings werden. Da diese Zeichenweise mit einer Schleife kopiert werden. Aber bei get-Methoden sollten man eigentlich kein Problem haben.


Du solltest dafür sorgen das der kritische Breich entsperrt wird falls er unerwartet (durch einen Fehler z.B.) verlassen wird. Es kann ja sein das dein leave() nicht erreicht wird und schon hast du ein Problem.

Außerdem solltest du evtl noch eine Mutexklasse als Prozessübergreifendes Sperrobjekt mit einfügen, kritische Bereiche sind nämlich nur für den Prozessinternen Gebrauch gedacht.

Und ich denke viele würden eine Erklärung von Semaphoren und Events gutheisen! :)

grüße
@D13_Dreinig

37

24.11.2006, 11:14

Ich finde dieses Tutorial bisher echt gut gemacht. Mein Kompliment an dich. Selbst Neulinge werden hier bald die Grundfunktionen verstehen!

mfg Markus

FlyingDragon

Frischling

  • »FlyingDragon« ist der Autor dieses Themas

Beiträge: 38

Wohnort: Sachsen

Beruf: Consultant / Software Architekt

  • Private Nachricht senden

38

24.11.2006, 14:02

Ich hab anscheinend eine Welle losgestoßen. War auch mein Ziel. Aber das es so schnell geht hätte ich nicht gedacht. Hier gibt es ein neues Tut über die Synchronisation von Threads:

http://www.jliforum.de/board/viewtopic.php?p=63665#63665
Achtung! Das Lesen dieses Beitrags kann Ihnen und den Menschen in ihrer Umgebung erheblichen Schaden zufügen.
___________
Mein Leben, Freunde und die Spieleentwicklung

$nooc

Alter Hase

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

39

25.09.2007, 15:40

hallo :D

ich wollte nur kurz ne frage stellen..

bevor ich das mit den critical sections veruscht habe, wollte ich wissen was die console ausgibt wenn mans falsch macht, da das beispiel bild bei mir nicht angezeit wird (falls das eines ist)

und naja.. irgendwie gibt die console alles korrekt aus .. ?! :D

sollten da nicht sowas wie ein kleines chaos entstanden sein?
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

40

25.09.2007, 16:34

nun wenn man 2 oder mehrere thread parallel laufen lässt und die regelmäßig was in die con. ausgeben, kann und sollte es durhcaus passieren, dass der eine grade eine nachricht schreibt, und dann der 2. einfach seine nachricht da hin printet.(Wenn net ist das warscheinlich zufall, ich hoffe ich habe dein problem verstanden)


Socke

Werbeanzeige