![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пауза без остановки процесса типа Sleep [D7, Win2k]
Tor © (2005-09-13 16:30:00)Всем доброго!
Собственно вопрос уже задан. Отправляю комманды в ком порт и нужно вставить паузу между этими коммандами, что бы устройство на другом конце могло обработать предыдущею комманду до конца и вернуть ответ. Подошелбы и Sleep но он тормозит процес, а без этого получение ответа становится не возможным.
Мож кто чего подскажет?
Спасибо!
Tor (2005-09-13 17:28:00) [1]4 DesWind
Спасибо об этом я не подумал. надо это тоже предусмотреть :)
DesWind (2005-09-13 17:19:00) [2]Tor © (13.09.05 17:03) [11]
Чего он не поймет?
У тебя я так понял режим общения с кассовым аппаратом синхронный(запрос - ответ), а пользователь тычит в кнопки когда захочет. На мой взгляд надо делать очередь запросов ответов и обрабатывать их в отдельной нити. Эт если я правильно задачу понял
Tor (2005-09-13 17:19:00) [3]4 Reindeer Moss Eater на [18] Если так, тогда уже ничего.
Но я уже написал через апишные тригеры. Не хочу связывать этот модуль с остальной частью программы, т.к. этот модуль общий на нескуолько прог. да и сами по себе они не большие.
Reindeer Moss Eater (2005-09-13 17:13:00) [4]Смотрел в хелпе ничего подобного про таймеры нет.
Это тоже триггер. Кроме триггеров на данные есть триггера на статус с время.
Reindeer Moss Eater (2005-09-13 17:11:00) [5]Не понимаю твоих проблем.
В триггере ты всегда знаешь, на что он сработал.
А глобальный флаг поможет узнать какая была последняя команда.
Чего еще надо - не понимаю.
Tor (2005-09-13 17:11:00) [6]4 Reindeer Moss Eater
Смотрел в хелпе ничего подобного про таймеры нет. Нет только тригер. Он срабатывает на обпределенный байт поступающий в порт с той стороны или же выводит месагу о тайм-ауте.
Tor (2005-09-13 17:08:00) [7]4 Reindeer Moss Eater
Возможно, но тогда это реализовано уже в компоненте, но скорее всего там это по другому.
Я же работаю с этим тригером как с таймером, ведь у тригера тож есть тайм-аут.
Reindeer Moss Eater (2005-09-13 17:08:00) [8]Да лана народ проще заюзать пару апишных таймеров между коммандами.
Сам TapdComPort порт может взвести у себя таймер.
Reindeer Moss Eater (2005-09-13 17:06:00) [9]По ответу не возможно определить какая предыдущая ком. была
Флаги надо вводить.
Либо отказываться от триггеров и реализовывать линейный алгоритм с синхронным чтением.
Tor (2005-09-13 17:06:00) [10]4 Kolan
Нет один с vcl работает другой работает с com-портом и пишет и ситает, к общим данным через критические секции обращаться мона.
Reindeer Moss Eater (2005-09-13 17:03:00) [11]Возможно с самого начала нужно было работу с com-портом в отдельный
Это обязательно...
Ерунда это.
Потому что тогда придется крутить тупой цикл ожидая срабатывания триггеров. Либо отказываться от них вообще.
Tor (2005-09-13 17:03:00) [12]Асинхроное не подойдет, кассовый не поймет.
В тригере не знаю, он срабатывает на конечный байт, потом вызывается функция которая дописывает этот конечный байт в общий буфер. По ответу не возможно определить какая предыдущая ком. была, т.к. ответ это состояние кассового. Допустим какой режим активизирован узнаю, а вот зарегистрирован какойнить кассир или нет, это уж фиг. Можно конечно последнюю ком-ду хранить в какойнить глобальной переменной, но мне кажется это не очень красиво.
Да лана народ проще заюзать пару апишных таймеров между коммандами. Темболее в этой проге их всего 4, т.е. таймера будет 3. Это проще чем приписывать отдельный поток или переписывать усю прогу.
DesWind (2005-09-13 16:59:00) [13]Tor © (13.09.05 16:30)
т.е. тригер срабатывает на определенный байт.
Хотя оно там наверняка реализовано уже.
DesWind (2005-09-13 16:55:00) [14]Может легче взять другой компонент, где реализовано асинхронное чтение и особо не парится?
Kolan (2005-09-13 16:54:00) [15]Два потока один читает другой пишет? Хотя [4] не очень понял.
Возможно с самого начала нужно было работу с com-портом в отдельный
Это обязательно...
Reindeer Moss Eater (2005-09-13 16:51:00) [16]Зашибись.
А типа в триггере ты не знаешь на какую команду он сработал.
Tor (2005-09-13 16:50:00) [17]Можно, но комманды разные, а тригер один. Придется проверять какая комманда была предыдущей, что бы знать какая следующая.
Reindeer Moss Eater (2005-09-13 16:48:00) [18]Зачем же тебе цикл, если у тебя срабатывает триггер в нужный момент?
В обработчике триггера и делай свою работу.
Tor (2005-09-13 16:45:00) [19]юзаю TApdComPort для работы с com-портом. все общение реализовано на тригерах, т.е. тригер срабатывает на определенный байт. Так вот если ждать ответа в цикле что бы потом запустить следующею комманду то тригер не сработает, короче говоря зациклится прога. Если заслипеть то тоже тригер не сработает. Сам ответ не нужен. Лана похоже придется юзать апишные таймеры. Возможно с самого начала нужно было работу с com-портом в отдельный поток сувать.
Буду рад дальнейшим предложениям.
begin...end (2005-09-13 16:40:00) [20]
> Подошелбы и Sleep но он тормозит процес
Он тормозит не процесс, а поток :)