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

11

24.11.2003, 19:25

stimmt das mit syncron is kack aber besser als stocken. Am besten set man die 3 threads ( recv, send, game ) auf die selbe Priority (HIGH).
Wenn das immer noch nix bringt dann ein Sleep(1); reinhauen oder sowas ähnliches. Damit alles Threads gleich lang laufen.

DarthB

Treue Seele

Beiträge: 265

Beruf: Schüler

  • Private Nachricht senden

12

24.11.2003, 19:53

Na das bringt mich jetzt alles ein bisschen aus den Konzept. Ich hab nämlich mal ein bisschen was mit WinSock gemacht und wollte mir jetzt eine Klasse schreiben die mir alles abnimmt, bzw ist die schon fast fertig.

Ich arbeite aber nicht mit mehren Threads sondern mit einer Funktion namens select. Diese Funktion prüft ob etwas ankommt also ob man recv aufrufen kann. So rufe ich zwar recv auf aber nur wenn wirklich was da ist also wird auch nichts blockiert.

Würdet ihr mir jetzt dringes entpfehlen die Methode mit den Threads zunehmen oder kann man es nach meiner Methode auch machen?

[EDIT]
Über Quellenangaben würde ich mich sehr freuen. Ich hab zwar schon im Internet gesucht, aber dass hab ich noch nirgends gelesen. Oft wurde halt dieses select benutzt in Artikeln zu Winsock.
[/EDIT]

Ciao DarthB :huhu:

13

24.11.2003, 20:40

falsch, trotz select wird blockiert, probiers mal aus, lass jedes mal nach dem die recv prüfst mal irgendwas ausgeben. Dann siehst du es.

DarthB

Treue Seele

Beiträge: 265

Beruf: Schüler

  • Private Nachricht senden

14

24.11.2003, 20:53

Naja irgendwie weiß ich nicht was du meinst. Wenn ich mit select prüfe wird recv nur aufgerufen wenn was zum entpfangen da ist. Und das dauert ja nicht lange.

Unter blockieren versteht man doch die Zeit die der Prozess in der recv Funktion verbringt ohne das was zum entpfangen da ist, diese Situation wird durch select aber aussgeschlossen.

Wenn ich direkt nach recv etwas ausgebe wird nur immer was ausgegeben wenn ich was entpfange, das liegt aber nicht daran das recv blockiert sondern das es nur in die Bendingun kommt wenn select einen Wert größer als 0 zurückliefert.
Meintest du das überhaupt so?

Jedenfalls habe ich auch eine Hauptschleife und wenn ich in der was ausgebe wird es zig Tausend mal hinternander geschrieben (Konsole). Also blockiert doch nichts!

Irgendwie reden wir aneinander vorbei!

Ciao DarthB :huhu:

15

24.11.2003, 21:02

@ Darthb:

Nein das stimmt nicht, probiers doch aus man. Ich hab mir einen Server mit select gebastelt und nach jeden Update der RECV mit select einen string ausgeben lassen. Und er hat ihn immer nur weitergeschrieben nach dem ich was zum server gesendet hab.

Bevor du Thesen aufstellst prüf sie ...

Klaus

Treue Seele

Beiträge: 245

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

16

24.11.2003, 21:07

Zitat von »"ghostie"«

Bevor du Thesen aufstellst prüf sie ...


dann wärs ja keine These mehr ;)
Mozilla Firefox
The Browser - reloaded

DarthB

Treue Seele

Beiträge: 265

Beruf: Schüler

  • Private Nachricht senden

17

24.11.2003, 21:20

Zitat von »"ghostie"«


Nein das stimmt nicht, probiers doch aus man. Ich hab mir einen Server mit select gebastelt und nach jeden Update der RECV mit select einen string ausgeben lassen. Und er hat ihn immer nur weitergeschrieben nach dem ich was zum server gesendet hab.


Zitat von »"DarthB"«


Wenn ich direkt nach recv etwas ausgebe wird nur immer was ausgegeben wenn ich was entpfange, das liegt aber nicht daran das recv blockiert sondern das es nur in die Bendingun kommt wenn select einen Wert größer als 0 zurückliefert.


Zitat von »"DarthB"«


Jedenfalls habe ich auch eine Hauptschleife und wenn ich in der was ausgebe wird es zig Tausend mal hinternander geschrieben (Konsole). Also blockiert doch nichts!



In dem vorherigen Post habe ich dir doch beschrieben was ich getan habe(ein Test Programm geschrieben), was passiert ist und was ich darauß schließe.
Du hast leider kein vernümftiges Gegenargument zu meinen Schlussfolgerungen gebracht, weil du anscheinend meinen Text nicht gelesen hast.
Naja was solls.

Ciao DarthB :huhu:

PS.
Was ich nach dieser Prüfung eigentlich nur noch wissen möchte ist ob man zum entpfangen so lange in recv verweilen kann, dass es sich lohnen würd einen eigenen Thread dafür zu erstellen.

18

24.11.2003, 21:24

.... args .... könnte dem das mal jemand erklären ?

Darth versteht irgendwie nicht das SELECT auch noch ein Blocking Call ist oder mein Winsock.DLL spinnt derbst.

DarthB

Treue Seele

Beiträge: 265

Beruf: Schüler

  • Private Nachricht senden

19

24.11.2003, 22:46

@ghostie
Ach ich weiß wo unser Problem liegt. Übergieb mal bei select als letzen Parameter einen Pointer auf einen TIMEVAL der die Attribute sec und usec beide 0 hat. Wenn man als Timeval einfach eine NULL übergiebt wartet er unendlich lange. Und wenn man das voherige macht überprüft er einmal kurz un geht weiter. ;)

Wir rufen die Funktion also mit unterschiedlichen Parametern auf, du so dass sie blockiert und ich so das sie sofort weitergeht.

Ciao DarthB, der hofft das das Prob jetzt geklärt ist. :huhu:

20

24.11.2003, 22:52

ah cool, wusst ich gar nich, dann isses klar :)


BIGGGGGGGGGGGGGGGG SOOORYY :)

Werbeanzeige