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

Flutschi

Treue Seele

  • »Flutschi« ist der Autor dieses Themas

Beiträge: 90

Wohnort: Schweiz

  • Private Nachricht senden

1

06.11.2012, 09:05

Network & Thread & Multiplayer

Hallo,


Ist es intelligent das Empfangen von Daten für Multiplayer über einen Thread zu starten? sodas es halt seperat läuft? oder soll ich das abfangen von Daten lieber in der mainschlaufe des Spieles machen?
Alles mit SFML 2.0..


Gedanken die ich mir mache sing:

- Kann ich per seperaten Thread mit sf::Thread starte, kann der dann einfach zwischendurch auch auf das sf::RenderWindow zeichnen? ohne das es da komplikationen gibt?
- Wenn ich einen Thread erstelle, sind dann "static" Variablen immernoch dieselben wie die vom Original Programm?


Fragen über fragen... ;)
♥ SFML 2.0 Visual Express 2010 ♥

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

06.11.2012, 11:22

Bei IO ist ein separater Thread generell sinnvoll, wenn Du die FPS nicht komplett auf 0 drehen willst für eine Weile. Dieser Thread sollte natürlich ohnehin NIEMALS irgendwas auf das Display zeichnen wollen. Er muss IO machen, mehr nicht.

Static-Variablen sind dann noch immer die selben, solange Du kein fork() nimmst. Allerdings solltest Du eventuell dringend darüber nachdenken static Variablen abzuschaffen. Das ist *gerade* bei Multithreading eine ganz schlechte Idee und ein großes Synch-Problem.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

3

06.11.2012, 11:55

Es gibt auch Non Blocking Sockets, womit Du das auch in der Hauptschleife machen könntest. RakNet und Konsorten machen aber immer einen eigenen Thread auf und kümmern sich dann natürlich auch um die Synchronisierung.

Du musst bei einem eigenen Thread ja auch bedenken: wie verarbeite ich die empfangenen Pakete? Wie übergebe ich Pakete für das Versenden? Denn damit änderst Du ja auch vom Hauptthread aus diverse Listen und Strukturen des Netzwerk-Threads und musst auch synchronisieren.

Meine Empfehlung: schnapp Dir RakNet. Ist kostenlos für Hobbyentwickler und bringt schon eine Menge Zeugs mit, das Du sonst selbst schreiben müsstest. Verlässlichkeitsgarantie auf Wunsch, regelmäßiges Pingen, Feststellen von Verbindungsverlusten, Helferklassen für bitweises Zusammenstellen von Paketen, NAT-Punchthrough, Master Server, Voice und was weiß ich noch alles. Und macht natürlich auch das erwähnte Threading selbst, also könntest Du diesen Teil Deiner Wissenslücke an was Harmloseren schließen. Multithreading ist nix für ne halbe Stunde nebenbei.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

Flutschi

Treue Seele

  • »Flutschi« ist der Autor dieses Themas

Beiträge: 90

Wohnort: Schweiz

  • Private Nachricht senden

4

06.11.2012, 12:36

Danke, hab SFML, das erledgit auch vieles für mich ;)

Ich baus grad mal in die Hauptschleife ein, mal schuan wie das funkt... danke für die Tipps
♥ SFML 2.0 Visual Express 2010 ♥

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

5

06.11.2012, 16:24

Und ich kann persönlich nur von Raknet abraten. Es hat zwar viel drumrum, machte aber in meinen Tests bisher seine eigentlichen Hausaufgaben nicht wirklich gut (Raknets Verhalten im Reliable Modus ist sehr grob). Aber vielleicht wurde das ja nachgebessert und ich sollte mal meine Tests aktualisieren.
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.

Flutschi

Treue Seele

  • »Flutschi« ist der Autor dieses Themas

Beiträge: 90

Wohnort: Schweiz

  • Private Nachricht senden

6

06.11.2012, 17:46

Jo, danke vielmals, ich ahb mich jetzt mal in SFML reingearbeitet, darum such ich da nix neues ;)
♥ SFML 2.0 Visual Express 2010 ♥

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

7

06.11.2012, 18:23

Was empfiehlst Du denn stattdessen?
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

8

06.11.2012, 19:44

Zum eigentlichen Thema: Für kleine Anwendungen reichen sockets in nonblocking modus. Mit Threading muss man halt darauf achten, dass man zwar einfach weiterhin kreuz und quer auf Variablen zugreifen kann, aber es schnell zu bösen Fehlern kommt, wenn man threadübergreifende Zugriffe nicht per lock/mutex/pipes/queues etc absichert.
Zu meiner persönlichen Empfehlung: naja je nach geforderten Abstraktionslevel und Anforderung Asio,enet oder irrnetlite. SMFL ist sicherlich auch nicht schlecht, aber damit habe ich keine persönliche Erfahrung gemacht.
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.

Flutschi

Treue Seele

  • »Flutschi« ist der Autor dieses Themas

Beiträge: 90

Wohnort: Schweiz

  • Private Nachricht senden

9

06.11.2012, 22:52

Also ich habs jetzt zufriedenstellend mit SFML hingekriegt, keinen seperaten thread machen sondern einfach in die Hauptschleife packen. Manchmal unterschätze ich die schnelligkeit von Computern ;)
♥ SFML 2.0 Visual Express 2010 ♥

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

10

06.11.2012, 23:49

Das hat normal nichts mit Schnelligkeit von Computern zu tun. Man benutzt in solch einem Fall Threads, damit das Programm nicht angehalten wird, solange Daten gesendet oder empfangen werden. Hier gehts also weniger um Geschwindigkeit von Computern, als von Netzwerken um es mal umgangssprachlich auszudrücken.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige