» »

C/C++ Kako obvestim ostale threde, da je prispel nov podatek?

C/C++ Kako obvestim ostale threde, da je prispel nov podatek?

pro549 ::

Rad bi napisal en program kjer bi imel en "write" thread (W) in večkratne "read" threade (R). Write thread skrbi za to da fila nek krožni buffer (circular buffer) s podatkami, read thread pa naj bi prebral te podatke. Skratka me zanima, če je kak učinkovit način kjer bi "W" thread obvsetil "R" threade, da je del bufferja nafilan z novimi podatki. Rad bi se izognil funkcijam kot so sleep ali pa while zankam, da konstantno pverjajo ali je prispel kak nov podatek v buffer.

Awacs ::

PostMessage oz. PostThreadMessage

JanK ::

Ne vem v kaksnem okolju delas, sam za taksne zadeve uporabljam ACE. Ce zadevo namesto z bufferjem resis z vrsto, je resitev trivialna: vsak R thread enostavno poklice blocking dequeue. Ce ni nic v vrsti, vsi R threadi cakajo. cim nekaj prileti, se eden od threadov zbudi in obdela podatke. Z ACE bi slo to takole:

ACE_Message_Queue* queue;
while( true ){
  ACE_Message_Block* message;
  queue->dequeue(message);
  process_message(message);
}

SasoS ::

Jasno da while in sleep nista pravi izbiri saj s tem zgrešiš bistvo threadanja. Za take zadeve se uporabi semafor ali kak drug threading primitive.

IceBoX ::

Bom kar tukaj vprašal, da ne bom odpiral nove teme. Sam sem začetnik v C in me zanima zakaj ne morem uporabljati cout in cin. Ali je to mogoče samo v C++?
Huh...

pro549 ::

JanK je izjavil:

Ne vem v kaksnem okolju delas, sam za taksne zadeve uporabljam ACE. Ce zadevo namesto z bufferjem resis z vrsto, je resitev trivialna: vsak R thread enostavno poklice blocking dequeue. Ce ni nic v vrsti, vsi R threadi cakajo. cim nekaj prileti, se eden od threadov zbudi in obdela podatke. Z ACE bi slo to takole:


ACE_Message_Queue* queue;
while( true ){
ACE_Message_Block* message;
queue->dequeue(message);
process_message(message);
}


Prvo bom poskusil napisat kodo v linuxu, kasneje pa še za embeded naprave (linux: busybox)

ERGY ::

IceBoX je izjavil:

Bom kar tukaj vprašal, da ne bom odpiral nove teme. Sam sem začetnik v C in me zanima zakaj ne morem uporabljati cout in cin. Ali je to mogoče samo v C++?


scanf() pa printf() sta za c. #stdio
cin, cout pa za cpp. #iostream


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Worker arhitektura

Oddelek: Programiranje
102140 (1752) pegasus
»

Real-time database

Oddelek: Programska oprema
351577 (1094) kunigunda
»

[JAVA] zaustavitev niti (threadov)

Oddelek: Programiranje
223172 (3172) morbo
»

Komunikacija med thread-i

Oddelek: Programiranje
133741 (3547) zlatko
»

Message Queue

Oddelek: Programiranje
121100 (890) Vesoljc

Več podobnih tem