chat ohne threads?
-
ich hab nen ganz einfachen chat in c (console)
wie kann ich bei dem chat nun realisieren dass gleichzeitig auf empfang gewartet wird,ohne dass das programm anhält?edit: bzw dass der server gleichzeitig auf listen ist und nachrichten empfangen und schicken kann?
-
Hm...
schreibe dir einen fork der Daten aus dem Socket liest und in eine Datei schreibt. Im Client machst du das dann so, dass in einer Schleife Zeichen (keine ganzen Saetze!) eingelesen werden und nach jedem input eines Zeichens wird die vorher genannte Datei ausgelesen und ausgegeben.
Das ist zwar voelliger schwachsinn, aber komplett thread-frei.
-
ok, wie schreibe ich denn theads in reinem c?
gibts da n tut oder so?
danke
-
Ich interessiert das auch sehr arg!
Falls jemand etwas darüber weiß, bitte schreibt es.
Danke
-
afaik hat ansi c keine threads.
im aktuellen ansi c++ scheinen auch keine zu sein.wird alles über zusätzliche libraries gelöst.
in denen sind dann im endeffekt systemcalls/API aufrufe, die die threads erzeugen.auf linux/unix gibt es wie schon gesagt, fork(), eine art "threading". eigentlich wird der ganze prozess kopiert und im kindprozess die funktion mit einem anderen return wert ausgestattet.
benutz select()
unter linux (oder cygwin emulation) kannst du sogar stdin als "socket" benutzen.
-
haste n gutes tut wo select genau erklährt wird?
-
Thread-Funktionen sind OS-Spezifsch. _beginthreadex wird unter VC6 und Windows
bevorzugt. Daneben gibts jedoch:
- für C http://sources.redhat.com/pthreads-win32/
- für C++ http://www.boost.org/doc/html/threads.html
-
Redhead schrieb:
_beginthreadex wird unter VC6 und Windows
bevorzugt.Unsinn.
-
kann man denn in einem windows konsolenprogramm überhaupt threads starten?
wenn ja wie? (meinetwegen auch c++ , api oder so
-
pixartist schrieb:
ok, wie schreibe ich denn theads in reinem c?
gibts da n tut oder so?
dankegar nicht. C kennt keine Threads. Da musst du OS spezifisch programmieren. Hier werden wir dir wenig helfen können.
-
hm also mit select hab ich den server jetzt hinbekommen, aber beim client is das problem, dass ich ja immer scanf anhabe damit der client was schreiben kann, allerdings kann ich währenddessen nicht empfangen !
kann man das auch mit select lösen ? ich wüsste nicht wie!
-
wie ich schon sagte, akzeptiert der select() call unter linux auch file descriptoren (neben den socket descriptoren)
also einfach stdin mit in die readfd mit aufnehmen
-
c.rackwitz schrieb:
wie ich schon sagte, akzeptiert der select() call unter linux auch file descriptoren (neben den socket descriptoren)
also einfach stdin mit in die readfd mit aufnehmen
ähm
ich hab kein linux
stdin?
readfd?
bitte erläutern
ich les die einkommenden daten mit recv()
-
wenn du kein linux hast, kannste cygwin nehmen und so tun als ob.
http://www.ecst.csuchico.edu/~beej/guide/net/html/advanced.html#select