andr_larr писал(а):
Я так понял что за время одной выборки по тайм-ауту считывается один байт,при следующей ещё один и так до окончания блока байт в буфере ?Нет, запрашивается сразу N-е количество, и функция ждет определенное время (я описал в предыдущем посте минимум сколько будет ждать, к этому времени еще можно прибавить таймаут ожидания следующего пакета), после чего отдает запрошенное число байт, если их меньше, то отдает все, что есть. После считывания, считанные байты из буфера удаляются. Если буфер пуст, то на выход будет попадать пустая строка, ее можно использовать для синхронизации данных приема.
andr_larr писал(а):
А записывается байт в буфер приходу его на вход буфера или тоже по таймингу ?Не понял вопроса, совершенно
------------ Дoбавленo в 16.17:
Вот один из вариантов синхронизации чтения по пустой строке
Add(CharArray,16152177,308,168)
{
link(onGetStr,453684:doCase,[])
}
Add(ArrayRW,11247255,308,231)
{
link(Array,16152177:Array,[])
}
Add(Case,9660739,175,245)
{
Value=String()
link(onNextCase,11247255:doAdd,[])
link(onTrue,9251516:doEvent1,[])
}
Add(Hub,9251516,224,252)
{
OutCount=3
link(onEvent1,16152177:doGetStr,[(259,258)(259,181)])
link(onEvent2,16152177:doClear,[(273,265)(273,188)])
link(onEvent3,5708023:doEnum,[])
}
Add(StrList,1247807,427,154)
{
}
Add(Check,8075546,504,266)
{
Caption="На обработку"
}
Add(ArrayEnum,5708023,441,266)
{
link(onItem,8075546:doWork,[])
link(Array,1247807:Array,[])
}
Add(COM,1518075,119,238)
{
link(onRead,9660739:doCase,[])
}
Add(Case,453684,364,175)
{
Value=String()
link(onNextCase,1247807:doText,[])
}