|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
11.09.2017, 16:18 | #1 |
Регистрация: 19.05.2017
Сообщений: 7
|
TComPort Асинхронная передача
Код:
Разом в неблокирующем режиме отправляется только 128 +-5 байт. Если попробовать записать больше - программа глохнет и ждет пока не отправятся все байты. Если отправлять по 50 байт на минимальной скорости, то на 3 отправку - когда этот псевдобуфер в 128байт переполняется имеем опять такой же затык и ждем пока не отправятся все... MyPort1.Buffer.OutputSize - возвращает 1024. self.MyPort1.OutputCount - всегда возращает 0. Ткните носом, пожалуйста, что я не так делаю. Такое ощущение, что не включается асинхронный режим. Delphi XE7 , TComPort 4.11 |
11.09.2017, 20:26 | #2 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
А какой, простите, резон запускать асинхронную операцию и тут же ждать результатов её завершения?
|
12.09.2017, 00:53 | #3 |
Новичок
Джуниор
Регистрация: 12.09.2017
Сообщений: 2
|
А вопрос читаем. Кто ждет "тут же завершения" ?
Буфер - 1к. Асинхронный ? Так прими хотя бы 0.5к, сразу выйди и работай в фоне.Так ведь не выходит каменный цветок. Вот и интересно - где не так ? Толи размер буфера не размер, толи не того буфера, толи асинхрон не асинхрон. Убедительная просьба - не надо произносить слово "поток" PS За соседним столом был. |
12.09.2017, 03:42 | #4 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
для начала строка в Delphi XE7 получается в 2 раза больше чем length(str)
Не стесняемся, плюсуем!
|
12.09.2017, 08:47 | #5 |
Новичок
Джуниор
Регистрация: 12.09.2017
Сообщений: 2
|
лучше начните с самого конца, т.к. цифры - приведены, а автор уже освоил сложение и вычитание
|
12.09.2017, 12:29 | #6 | ||
Регистрация: 19.05.2017
Сообщений: 7
|
Цитата:
Цитата:
WaitForAsync нужно вызывать до WriteStrAsync, т.к. в этом случае мы гарантированно дождемся завершения отправки. Соответственно вопрос: Как не заходя в WaitForAsync проверить что все, что я положил в буфер ушло? и как корректно заставить работать MyPort1.OutputCount, чтоб узнать сколько еще лежит в Тх буфере? |
||
12.09.2017, 14:01 | #7 |
Регистрация: 19.05.2017
Сообщений: 7
|
|
12.09.2017, 19:01 | #8 |
Регистрация: 19.05.2017
Сообщений: 7
|
Новой вопрос.
отправляем массив байт: Код:
Грубый расчет: 200байт * 8 бит = 1600 бит. делим на 110Бод / получаем ~14.5 сек. оно должно отправляться... На деле время между Код:
Код:
Соответственно есть подозрение, что имеем какой-то "железный" буфер уровнем ниже как раз размером ~128 байт (см первый пост) и функция WaitForAsync возвращает результат как только последний байт впихнется в этот "железный" буфер. (200 байт - 128 байт "буфера" = 72байта * 8 бит = 576 бит. делим на 110 бод получаем примерно эти ~6 сек. т.е. фактически через 6 секунд после отправки мне функция вернет результат в 200 отправленных байт - но на деле же они будут фактически еще отправляться ~8 секунд из "железного" буфера Вот собственно и вопрос) как узнать время фактической отправки именно последнего байта из "железки"? Последний раз редактировалось Gallean; 12.09.2017 в 20:28. |
13.09.2017, 05:07 | #9 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
Если ты пытаешься общаться с железкой на протоколе завязанном на таймингах - это плохая затея: Windows не RealTimeOS и тайминги будут сильно плавать. Выход промежуточная железка с RTOS, да не побьют меня палками, например arduino
Не стесняемся, плюсуем!
|
13.09.2017, 08:36 | #10 |
Регистрация: 19.05.2017
Сообщений: 7
|
нет, спасибо) Вопрос к тем, кто пользовал компоненту Ткомпорт)
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Принимаем смс. TComPort. | qZED | Компоненты Delphi | 5 | 03.12.2014 14:08 |
TComPort component ver. 2.00 | irradiator | Компоненты Delphi | 1 | 30.04.2014 19:41 |
Общие вопросы по TComport | qZED | Компоненты Delphi | 0 | 07.12.2013 09:35 |
TComPort | NewMember | Компоненты Delphi | 11 | 31.03.2012 09:32 |
Асинхронная передача данных | eda | Microsoft Office Excel | 4 | 17.08.2009 14:16 |