Re[2]: [boost::asio]прерывание async_read обработчиком тайме
От: kvser  
Дата: 20.05.09 04:18
Оценка:
Здравствуйте, Vinick, Вы писали:

K>>Необходимо при отсутствии данных в течение некоторого времени записать в socket тестовую посылку. Может быть следующая последовательность событий:

K>>1) прочитали часть посылки
K>>2) сработал таймер ???

V>Не совсем понятно что означает "посылка". Это какая-то структура переменной длины или фиксированный массив байт?


псылка/сообщение/и т.д. в данном контексте означает последовательность байт фиксированной длины, которая читается в буфер соответствующего размера

V>async_read вызовет хендлер только при полном заполнении буффера или при ошибке. Если посылка целиком умещается в буфер, то такая ситуация невозможна, при условии что io_service::run() запущен в одном потоке.


Вы хотите сказать что, если началось чтение, то хандлер таймера не вызовется пока не заполниться весь буфер? но это же не так

K>>Думаю что надо использовать вариант async_read для чтения с условием, а в обработчике проверки условия после первого байта останавливать таймер, а после последнего запускать

V>Получите первый байт, остановите таймер, после этого произойдет задержка и следующий байт получите только через 10 часов, а таймер то выключен

неее, за это отвечает другой таймер, назовем его t2
а про таймер который я говорю(назовем его t3), работает для того чтобы, если не было никаких сообщений некоторое время, то послать сообщение проверки связи
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.