Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Reaaliaikaisesti tapahtuva tiedonsiirto

Sivun loppuun

Hakoulinen [03.04.2008 18:22:42]

#

Eli siis aloittelen UDP-systeemiä, joka sekä vastaanottaa, että lähettää viestejä toiselle koneelle. Miten saan viestit vastaanotettua ja lähetettyä "samaan" aikaan?

Ja älkää kommentoiko turhaan, että miksi UDP..

Ja WinSockilla teen ihan.

map_ [03.04.2008 19:08:25]

#

Käytä joko poll() tai select() -funktiota (WinSockilla taitaa olla muitakin vastaavia), jotka kertovat, onko johonkin sockettiin tullut sanomaa mutta eivät jää odottamaan sitä. Näin joudut kuitenkin tutkimaan kaikkia vastaanottosocketteja toistuvasti ja tavallaan toivomaan, että WinSockin lähetysfunktiot eivät kuluta paljon aikaa (en tiedä onko tämä UDP:nkaan tapauksessa taattua).

Astetta parempi mutta jonkin verran monimutkaisempi tapa olisi käsitellä jokaista sockettia omassa säikeessään (thread).

Hakoulinen [03.04.2008 22:42:58]

#

Millä hakusanalla säikeistä voisi löytää?

Blaze [03.04.2008 23:04:59]

#

No thread(s)?

Hakoulinen [10.04.2008 11:32:39]

#

Toimisiko

bool a = FALSE;
while(!a) {
haeviestit();
kirjoitaviestit();
}

Deffi [11.04.2008 12:37:51]

#

Toimishan tollainen non-blocking soketeilla, mutta omasta mielestäni vähän raskas ja epäkätevä toteutustapa. Käytä niitä säikeitä tai select():iä, kuten jo neuvottiin.

Hakoulinen [11.04.2008 15:24:17]

#

Eikös linkissäsi annetussa koodiesimerkissä tehdä ihan samalla lailla kun mun edellisessä viestissä?

Siinähän on loputon for luuppi, jonka sisällä viestejä haetaan ja lähetetään?

Gaxx [11.04.2008 17:50:03]

#

Sama se on miten saat ohjelmasi toimimaan. Kuten sanottua, säikeiden tai select():n käyttö vain on kevyempää, kuin non-blocking socketit.

Jos et vielä ole ehtinyt lukemaan tuota Deffin linkittämää tutoriaalia, suosittelen tutustumaan siihen huolella. Erinomainen opas aloittelijoille ja vähän pidemmällekin ehtineille.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta