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

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

11

09.11.2011, 09:31

Die asynchrone Lösung war schon ok. Das Problem ist die Schleife dabei. Du musst bedenken, dass diesmal nicht blockiert wird.
„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.“

DerMark

Treue Seele

Beiträge: 324

Wohnort: Emsdetten

Beruf: Softwareentwickler

  • Private Nachricht senden

12

09.11.2011, 09:56

Bei der BeginAcceptTcpClient Lösung brauchst du nichteinmal einen extra Thread erstellen, starte einfach BeginAcceptTcpClient und wenn ein Client Acceptet wurde (dein Callback aufgerufen wurde) startest du es nochmal, fertig.

Einfach alles mit EndProcess beenden ist eine sehr schlechte Idee, wer weiß was der Thread unter umständen noch für Systemresourcen geöffnet hat, zB könnte er irgendwelche Ports blockieren, bis diese dann automatisch durch irgendwelche Timeouts wieder freigegeben werden, noch dazu ist sowas sehr unsauber, ich würde dafür zu Recht eins auf den Deckel bekommen, sollte ich meinen Code so schreiben.

Thread.Sleep sollte man nur verwenden wenn man weiß das man warten MÖCHTE und nicht warten MUSS. Und selbst für die MÖCHTE Situation gibt es meist andere Lösungen. Mit Thread.Sleep(wert > 1) blockiert der Thread für die angegebene Anzahl an Millisekunden und nichts kann ihn davon abbringen (Bis Thread.Kill oder solche Spielereien.). Dies ist ein Verhalten welches man meist nicht haben möchte.

Btw einem Thread zu signalisieren dass er sich beenden soll, bzw seine Aufgabe erledigt ist, macht man normalerweise eher nicht mit einer bool Variable sondern mit WaitHandles und ähnlichem.

mfg Mark

Pixma

Frischling

  • »Pixma« ist der Autor dieses Themas

Beiträge: 35

Wohnort: Mainz

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

13

09.11.2011, 10:58

ok habe den Thread rausgenommen und amche es nun komplett über die methode begiNAcceptTCPClient.
Mit WaitHandles habe ich noch nicht gearbeitet, kenne michd amit noch nicht so aus.

DerMark

Treue Seele

Beiträge: 324

Wohnort: Emsdetten

Beruf: Softwareentwickler

  • Private Nachricht senden

14

09.11.2011, 11:01

Macht ja nichts, du solltest sie aber im Auge behalten, da sie früher oder später gebraucht werden sobald du etwas mehr mit Threads arbeitest.

Simpel beschrieben kannst du damit einen Thread solange schlafen lassen (kein CPU verbrauch) bis ein solches WaitHandle signalisiert wurde, erst danach arbeitet der Thread weiter, da steckt noch viel mehr nützlicher Kram dahinter, aber ich vermute einfach mal dass du das jetzt nicht unbedingt brauchst ;)

Werbeanzeige