Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[C] Onderlinge communicatie threads

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met het maken van een klein spelletje waar verschillende PC's met elkaar communiceren middels sockets. Hierbij connecten verschillende clients stations met 1 server.

Mijn idee was om op de server een aparte thread (pthread) te maken voor de socket verbinding. Deze wordt aangemaakt door main-programma. Nu wil ik dat op het moment dat deze socketthread een bericht binnen krijgt van een van de client hij dit bericht doorspeelt naar de main-functie van het programma!

Ik ben zelf op zoek naar een mogelijkheid om dit te bewerkstelligen en hoop dat iemand mij een duwtje in de goede richting kan geven. Ik heb geen kant en klaar antwoord nodig maar hoop dat iemand mij kan zeggen welke kant ik op moet zoeken. Wellicht is er een andere manier om het probleem aan te pakken dan hoor ik dat ook graag!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 28-11 09:35

leuk_he

1. Controleer de kabel!

Je stuurt een message naar je main thread.

Die message is wellicht geimplmenteerd als een stukje shared geheugen waarop je locking doet en waarop de main thread pollt.

http://www.llnl.gov/computing/tutorials/pthreads/

google is je vriend.

(als je heel veel sockets opent als in p2p applicaties dan is 1 thread per socket neit meer schaalbaar)

[ Voor 17% gewijzigd door leuk_he op 13-11-2007 11:53 ]

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Verwijderd

Topicstarter
leuk_he schreef op dinsdag 13 november 2007 @ 11:49:
Je stuurt een message naar je main thread.

Die message is wellicht geimplmenteerd als een stukje shared geheugen waarop je locking doet en waarop de main thread pollt.

http://www.llnl.gov/computing/tutorials/pthreads/

google is je vriend.

(als je heel veel sockets opent als in p2p applicaties dan is 1 thread per socket neit meer schaalbaar)
Dat had ik ook al gevonden! Maar ik vroeg mij af of er geen mogelijkheid is om de main thread als het ware te triggeren op het moment dat de socket thread informatie binnen krijgt? Of is het echt alleen mogelijk om de main thread te laten pollen?

  • soulrider
  • Registratie: April 2005
  • Laatst online: 27-11-2017
mogelijk met een soort van interrupts
maar dan ben ik in de wereld van microprocessoren en Real-time programma's aan't denken vermoed ik.

het kan je een denkpiste met oplossing opleveren natuurlijk.

(als je wilt dat een actie getriggerd wordt zodra iets anders gedaan is, is dat meestal een 'interrupt: je main wordt onderbroken om zo snel mogelij te reageren op di e inkomende informatie.
Met het pollen bepaal je zelf wanneer en hoe vaak ie gaat controleren op informatie en hoe snel ie er op moet reageren. interrupts zijn ook vrij platform afhankelijk dacht ik)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je main thread laten wachten op een waitable object (een event of condition oid, ik ken pthreads niet), en dat event triggeren vanuit je socket thread.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Nog meer over pthread: http://www.yolinux.com/TU...TutorialPosixThreads.html
Ze hebben wel conditions dacht ik, en andere manieren van thread synchronisatie: http://www.yolinux.com/TU...eads.html#SYNCHRONIZATION

  • YopY
  • Registratie: September 2003
  • Laatst online: 06-11 13:47
Je kunt natuurlijk van je 'main' thread een aparte thread maken die slaapt zolang er geen socket communicatie is. Ik ben niet zo bekend met C threads, maar als die net zoals Java threads een 'notify'-achtige methode bevatten is dat wel mogelijk.

Wanneer een van je socket threads nu iets binnenkrijgen, voeren ze de notify uit op de op dat moment wachtende verwerkthread, waardoor die wakker wordt en de gegevens van die socket verwerken.

Dan heb je nog wel het probleem van dat notify aangeroepen kan worden terwijl de main thread nog bezig is, maar daar zijn wel oplossingen voor te vinden.

  • MNeMoNiCS
  • Registratie: Mei 2002
  • Laatst online: 16-10-2012
Misschien is een Blocking Queue een idee? Je receiver threads slaan messages hierin op, de verwerkende thread leest de queue en blokkeert als er even geen bericht beschikbaar is. Hiervan bestaan vast wel C implementaties.

  • writser
  • Registratie: Mei 2000
  • Laatst online: 28-11 15:44
Misschien kun je een library als SDL (http://www.libsdl.org) gebruiken om 't threading gedeelte wat makkelijker te maken? Of QT of gtkmm o.i.d. als je in C++ bezig bent. Threading in C is best tricky. Als je voor de lol een spelletje maakt zou ik zo weinig mogelijk low-level met threads gaan prutsen.

Je zou ook je server in een lusje constant een socket kunnen laten pollen, dan heb je geen threads nodig.

[ Voor 71% gewijzigd door writser op 13-11-2007 16:19 ]

Onvoorstelbaar!

Pagina: 1