Autor Téma: Synaser a RecvByte  (Přečteno 1250 krát)

Offline jarex

  • Plnoletý
  • ***
  • Příspěvků: 214
  • Karma: 4
Synaser a RecvByte
« kdy: 17-08-2012, 12:53:19 »
Funkce RecvByte vrací nulu, pokud nic na sériák nedorazí???

Není moc dobré, že když nic na seriový port nedorazí, tak to vrací nulu.
Jak se pak má poznat, zda dorazila nula, nebo nic?

RecvInteger též vrací nulu. hmmm....   Zásahem do knihovny jsem si to předělal na -1.

Ale dle mého názoru by to tak mohlo být v knihovně nastálo, jelikož nevím, jak poznat zda nedorazilo nic, nebo nula.



Chtělo by aby to vracelo -1.

« Poslední změna: 17-08-2012, 13:05:27 od jarex »
D2007 Professional

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2475
  • Karma: 131
    • Verze Delphi: D2007, XE3, DX10
Re:Synaser a RecvByte
« Odpověď #1 kdy: 17-08-2012, 19:43:54 »
Jak se pak má poznat, zda dorazila nula, nebo nic?
Tak, ze si prectes alespon popis te metody RecvByte a tam to pisou...

Chtělo by aby to vracelo -1.
Hodnota -1 v oboru byte je nesmysl. Tak, jak to Lukas udelal, je to spravne. A ty bys mel misto chybnych uprav ciziho kodu (tobe prekladac nenarika nad takovou prasarnou  :o)?) zjistovat  po kazde operaci, ktera muze selhat, jestli se povedla nebo ne.

Offline jarex

  • Plnoletý
  • ***
  • Příspěvků: 214
  • Karma: 4
Re:Synaser a RecvByte
« Odpověď #2 kdy: 18-08-2012, 11:12:47 »
Samozrejme jsem to upravil ve funkci RecvInteger, to by prekladac tezko zchroupl mit hodnotu -1 v byte. Spatne jsem to v prispevku podal.
Drive jsem pouzival jakousi knihovnu port.dll a ta vracela -1. Inu přečtu si popis funkce RecvByte... :-)
« Poslední změna: 18-08-2012, 11:16:35 od jarex »
D2007 Professional

Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 193
  • Karma: 16
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Re:Synaser a RecvByte
« Odpověď #3 kdy: 21-08-2012, 17:36:50 »
Ono je hlavne uplne jedno, co to vraci, protoze po te operaci si mas zkontrolovat LastError, jestli se operace povedla, nebo jestli skoncila na timeout ci jinou chybu.

Dalsi vec je, ze jsem toho se Synaserem napsal uz docela dost  ;), ale jen vyjimecne jsem mel potrebo volat RecvByte. nejcastejsi chybou pouziti Synaseru je totiz to, ze lidi cyklicky nacitaji byte po bytu ze seriaku. Chyba! Pomale, neefektivni a nepohodlne. Patrne je to zvyk z cizich knihoven.

Zalezi na tom, co konkretne ctes, jestli nejde pouzit nejaka jina funkce, kterou nactes rovnou vetsi objem dat najednou, treba pomoci RecvTerminated, apod.

Offline jarex

  • Plnoletý
  • ***
  • Příspěvků: 214
  • Karma: 4
Re:Synaser a RecvByte
« Odpověď #4 kdy: 22-08-2012, 07:25:39 »
Ano, uz jsem to pochopil, jak je to u SYNASER. Potreboval jsem opravdu , a to jen docasne cist jen jeden byte. A to kvuli vyvoji jednoho hw, ktere mi ten jeden bajt posilalo co 20 ms.
D2007 Professional