Avatar
Tayson
Člen
Avatar
Tayson:

Ak v nejakom cykle while prijimam data kazdu 1/2 sekundy a v tom while stale pouzijem sleep na 100ms tak ako to potom funguje ?Uklada si ich niekde do buffera ?

 
Odpovědět 25.11.2013 9:01
Avatar
Kit
Redaktor
Avatar
Odpovídá na Tayson
Kit:

Když to budeš mít ve dvou vláknech, tak ne.

Nahoru Odpovědět 25.11.2013 9:47
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Tayson
Člen
Avatar
Odpovídá na Kit
Tayson:

Ako myslis v dvoch vlaknach ?

 
Nahoru Odpovědět 25.11.2013 10:11
Avatar
coells
Redaktor
Avatar
Odpovídá na Tayson
coells:

Tvoje otázka je příliš obecná na odpověď, ale platí, že pokud data čteš z nějakého I/O zařízení, pak operační systém nebo .NET framework bufferují data.

Pokud dat přibývá rychleji, než je zpracováváš, nastává tzv. throttling, kdy se čtecí služba "ucpe" a dojde k jednomu ze dvou stavů:

  1. buffer přeteče a OS odmítne další data přijímat, takže dojde ke ztrátě dat
  2. buffer přeteče a dojde k chybě na zařízení, které data posílá, takže dojde ke ztrátě dat

Otestovat si to můžeš snadno - pokud se data posílají každou 1/2 sekundu, dej si tam sleep na 1 sekundu a sleduj, jestli se něco ztrácí.

Editováno 25.11.2013 10:23
 
Nahoru Odpovědět  +1 25.11.2013 10:22
Avatar
Kit
Redaktor
Avatar
Odpovídá na Tayson
Kit:

V jednom vlákně budeš přijímat data tak jak přijdou ze vstupního zařízení. To vlákno bude asynchronní, bude stále čekat na vstupu. Druhé vlákno bude tato data zpracovávat a je jedno, jestli ho budeš uspávat na 100 ms nebo na 10 s. Jen musíš použít thread-safe proměnnou nebo kolekci na uchovávání stavu.

Nahoru Odpovědět  +1 25.11.2013 10:42
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.