![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
(com-порты) Кто тормозит - я или винда?
Palex © (2003-07-11 01:01:00)
Здравствуйте, товарищ ALL!
Есть такой вопрос – может кто поможет разобраться?..
Пишу программу для работы через COM с внешним устройством. Специфика его работы такова, что для работы с ним требуется постоянное поддержание коннекта (пакеты данных типа запрос (COM -> Device) – ответ (Device -> COM)) посылками через каждые 0.5 секунды. Внутри пакетов между байтами задержки по 1 милисекунде.
Но это так – для общего понимания вопроса! ;)
Так вот – во время работы если не дергаться мышкой – то все нормально. Но как только начинаешь клацать по менюшкам внутри программы – коннект срывается с 80% вероятностью. То есть, я понимаю, при нажатиях на кнопки/менюшки происходят события, и если оно попало при посылке пакета, то пауза между посылками отдельных байт превышает заданное время – и п…а коннекту ;)
Может, у кого-нить есть соображения по этому поводу?
З.Ы.: Посылку в порт всего пакета сразу не предлагать, т.к. на каждый принятый/отправленный байт получатель оного должен отправить подтверждение назад.
З.З.Ы.: Если по тексту встретились ламерские изречения – просьба не мате...ся – я только учусь ;)
Palex (2003-07-12 23:13:00) [1]
Обьясняю на пальцах:
Пакеты с подтверждением принятия каждого байта.
Компьютер . Tx: SS ww SS ww SS
Устройство. Rx: -- AA -- AA -- AA
Посылаю байт, жду ответа от девайса, посылаю следующий, жду ответа ...
Все байты высланы, жду пол секунды, посылаю следующий пакет.
Понятнее некуда. ;)
Германн (2003-07-12 01:39:00) [2]2 Palex (11.07.03 20:50)
2 Германн: Этот протокол придуман не мной, и девайс паял не я!
Это я понимаю. Я не понимаюкак можно объединить:
З.Ы.: Посылку в порт всего пакета сразу не предлагать
и
( пакеты данных типа запрос (COM -> Device)2 Palex (11.07.03 20:50)
2 Германн: Этот протокол придуман не мной, и девайс паял не я!
Это я понимаю. Я не понимаюкак можно объединить:
З.Ы.: Посылку в порт всего пакета сразу не предлагать
и
(пакеты данных типа запрос (COM -> Device) – ответ (Device -> COM)) посылками через каждые 0.5 секунды
Palex (2003-07-11 20:50:00) [3]
2 Германн: Этот протокол придуман не мной, и девайс паял не я! А такой монстр, как корпорация "VAG" ;)
2 Крот: Может посоветуешь какую-нибудь доку по вопросу, бо в потоках я не силен (мягко сказано...)?
2 Крот, 2 Nucl, 2 pasha : Спасибо, сейчас покопаюсь - посмотрю
pasha676 (2003-07-11 09:59:00) [4]
Иногда винда сбивает порт, если порты мыши и порт рабочий идут на одном прерывании. Но так как мышь ПС делить на 2 у тебя скорее всего, то проблемма решается как сказал Nucl.
Почитай тут. Модифицированнй код у меня работал и в системе "запрос-квитанция" для управления видаком JVC.
http://www.delphimaster.ru/articles/comport2/index.html
Nucl (2003-07-11 09:54:00) [5]
вот пример класса, для асинхронной работы с портом, все рулится в потоке, бошку нигде не срывает.
http://soft.bel.ru/files/Source.zip
Крот (2003-07-11 05:59:00) [6]
Попробуй выделить опрос устройства в отдельный поток.
Германн (2003-07-11 01:58:00) [7]
В первую очередь "тормозишь" ты.
Поскольку как тогда понимать твое - З.Ы.: Посылку в порт всего пакета сразу не предлагать, т.к. на каждый принятый/отправленный байт получатель оного должен отправить подтверждение назад.