![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как запустить программу с высоким приоритетом?
sdw_syscoder © (2004-08-09 20:02:00)Как запустить программу с высоким приоритетом?
sdw_syscoder (2004-08-10 08:14:00) [1]Доброе утро!
В принципе проблема возникает ни в самом коде реализации ввода/вывода в порт, а в процедуре(вызывается через Synchronize), где происходит копирование из буфера порта в массив, а затем из массива копируется методом Assign(на этой строчке и возникает еxception), в другой массив. Ну это ладно, я уже грузил здесь народ по этому поводу. Попробую исправить сам.
Ihor Osov'yak (2004-08-10 03:24:00) [2]2 GanibalLector © (10.08.04 02:12) [18]
Давно это было. Оле тогда еще и не пахло, была только книжечка с описанием протокола. Да и исходники у заказчика остались - мое участие в том проекте было эпизодичным и я не считтал нужным хранить копию исходников у себя.
Но если мне память не изменяет - не исключаю, что в этом проекте использовался CiaComPort - так что вряд-ли что интересно там можно увидеть. А может и не CiaComPort - но действительно, у меня не осталось воспоминаний, что там были какие-то проблемы.. И в остальных проектах, где шла работа с портами - тоже не было особых проблем.. Во всяком случае с поднятием приоритета. Да и собственно какие там проблемы могут быть - ведь драйвер порта использует свои буффера, и приоритеты прикладных процессов драйвер в общем то до фени.. А если для ожидания прихода символа или завершения передачи использовать SetCommMask + WaitCommEvent то сторожевой поток в основном в режиме простоя будет - следовательно ему как бы приоритеты тоже не очень то существенный.. А основной поток тоже в основном будет находиться в режиме ожидания нотификационного сообщения от сторожевого потока - то есть как бы ему высокий приоритет особо и не нужен.. А среагирует основной поток на нотификацию с некоторым опозданием - так собственно для этого случая буфера портов и предназначены.. Чтобы принять несколько символов от устройчтва, пока прикладное приложение со своей нотификацией и масками разбирается.
Естественно, весь вывод и ввод в ассихронном режиме. Можно, конечно, и синхронно, заюзав один дополнительный рабочий поток, но не знаю.. Тогда наверное можно без событий, но может возникнуть ситуация с нехваткой времени на подготовку и обработку данных. Ведь основное время поток будет умирать на операциях ввода-вывода. Конечно, можно подготовку-обработку вынести еще в один поток, но очень уж муторной будет синхронизация всего этого дела. Ассинхронный режим ввода вывода с использованием WaitCommEvent намного естественнее выглядит, да и проще в реализации.. И никаких повышенных приоритетов не требует..
А вот за инфу об оле спасибо - не исключаю, что этот дрефний софт придется модифицировать в обозримом будущем..
GanibalLector (2004-08-10 02:12:00) [3]>Нет - так как одно из условий выполнения проекта - нераспространение исходных кодов.
Ну это Вы зря.Почему???Обьясню:
-существуют OLE для работы с этим аппаратом(поставляется разработчиком) и оно FREE
-вышло уже более 4 версий этого аппарата и естественно протоколы у всех разные
-да и вообще,я хотел посмотреть на то как Вы все это делали в потоке и почему не нужно поднимать приоритет.
Ну,не хотите ...как хотите.Жадный Вы какой-то.
Ihor Osov'yak (2004-08-10 02:02:00) [4]Да, Мария. Ошибся, давно это было, года четыре.
Нет - так как одно из условий выполнения проекта - нераспространение исходных кодов.
GanibalLector (2004-08-10 01:57:00) [5]2 Ihor Osov'yak ©
Спасибо за "MTTTY sample application" почитаю на досуге.
Кассовый реестратор "Мрия"
Таких нет и небыло.Может "Мария"???
А почему НЕТ???Вы стесняетесь???
Ihor Osov'yak (2004-08-10 01:51:00) [6]2 [13]
> Вы удивитесь,но все функции вынесены в поток
ну, это еще не достаточное условие
> Более того,писалось все на АПИ...как раз "Serial Communications Functions".
более того, и этот факт дополнительно еще не стает достаточним условием..
Кстати, поищите CiaComport авторства Mestdagh Wilfried - вещь, вполне корректно работающая для большинства случаев, есть, правда, мелкие замечания п реализации, но я смотрел версию двух-или трехгодичной давности, сейчас, наверное, есть более новые.
> А вот что такое "MTTTY sample application" я не понял.
http://msdn.microsoft.com/library/en-us/dnfiles/html/msdn_serial.asp
и в частности http://download.microsoft.com/download/4/7/2/47291d3a-b5b5-4447-8182-4b72b505a603/4918.exe
Семпл от майкрософта, демонстрирующий разные методы работы с ком-портом.
Очень поучительный семпл.
Также можно использовать как инструментарий для тестирования устройств, подсоединенных к ком-порту.
> хватит придираться.
Не давайте повода.
> Мастер как ни как
иногда бываю, моментами вспоминаю..
2 [14]
Кассовый реестратор "Мрия". Нельзя.
GanibalLector (2004-08-10 01:31:00) [7]. И с ком-портом вообще, и с кассовым аппаратом в частности
А с какими аппаратами,если не секрет???И можно ли взглянуть на это творчество???
GanibalLector (2004-08-10 01:29:00) [8]Может потому, что я слышал о потоках, об ассинхронном вводе/выводе, немного в мсдн посмотрел раздел "Serial Communications Functions", всякие там SetCommMask, WaitCommEvent.
Вы удивитесь,но все функции вынесены в поток . Более того,писалось все на АПИ...как раз "Serial Communications Functions".
А вот что такое "MTTTY sample application" я не понял.
Да, еще. Прог я не пишу. А вот программы иногда случается.
Ну да ладно...хватит придираться.Вы же в почете.Мастер как ни как.
Ihor Osov'yak (2004-08-10 01:18:00) [9]2 [11] GanibalLector © (10.08.04 00:51)
Вам покажется странным, но пробовал. И с ком-портом вообще, и с кассовым аппаратом в частности. Потребности в химии с приоритетами не возникало. И не особенно интересовало, что там пользователь в фоне запускал. Может потому, что я слышал о потоках, об ассинхронном вводе/выводе, немного в мсдн посмотрел раздел "Serial Communications Functions", всякие там SetCommMask, WaitCommEvent. И не влом было глянуть на "MTTTY sample application"... И не только посмотрел, а и немного использовал из того, что увидел..
Да, еще. Прог я не пишу. А вот программы иногда случается.
GanibalLector (2004-08-10 00:51:00) [10]Значит топорно работаете с ком портом
Ничего подобного.Вы сами то пробовали???Вот ,например,писал я одну прогу для программирования товаров кассового аппарата.Сам процесс занимает от 10сек до 5 мин. и откуда я знаю,что будет делать пользователь все это время???Может ему захочется посмотреть фильм или послушать музыку.И без повышения приоритета ИНОГДА бывает сбой,а с повышением их не бывает вообще.
И плюс [10]
sdw_syscoder (2004-08-10 00:11:00) [11]> GanibalLector © (09.08.04 23:15) [7]
Во-во, на счёт порта это ты правильно речь толкнул. Речь даже ни о фильмах, а как только диспетчер памяти запускаешь во время чтения с порта или WinAMP врубает следующий трек, так и всё, кранты, прогу клинит (хорошо не виснет) и внешний девайс кричит об ошибке. Вот так! Поэтому когда работаешь с портом, приходиться ждать пока програ не отработает.
> Ihor Osov'yak © (09.08.04 23:25) [9]
ДА! Работаем в поте лица!
А на от прерывания кванта времени, это даже и приоритеты могут не спасти.
Ihor Osov'yak (2004-08-09 23:25:00) [12]2 [7] GanibalLector © (09.08.04 23:15)
Значит топорно работаете с ком портом.
2 [6] GuAV © (09.08.04 23:12)
Потому что это решение не гарантирует получение достаточных ресурсов процессора и не гарантирует, что квант времени не будет прерываться другими процессами или системой. Иногда может и есть смысл поднимать приоритет на короткие промежутки времени, если есть уверенность что ресурсов процессора все же хватит в данный момент времени. Здесь ключевое слово "может".
GuAV (2004-08-09 23:20:00) [13]
> запускаешь посмотреть пару фильмов.
как, что, одновременно? хм...
GanibalLector (2004-08-09 23:15:00) [14]> имхо, безполезное это занятие..
Очень даже полезное,когда например работаешь с ком-портом и одновременно запускаешь посмотреть пару фильмов.
GuAV (2004-08-09 23:12:00) [15]
> имхо, безполезное это занятие..
Почему (никогда такое не делал, но всё же) ?
Ihor Osov'yak (2004-08-09 23:07:00) [16]имхо, безполезное это занятие..
Mim1 (2004-08-09 21:19:00) [17]
CreateProcess(nil,'notepad',nil,nil,false, HIGH_PRIORITY_CLASS,nil,nil,si,pi);
Мастер (2004-08-09 20:35:00) [18]http://www.delphimaster.ru/cgi-bin/forum.pl?id=1091280137&n=5
sdw_syscoder (2004-08-09 20:21:00) [19]Чё та я не врубаюсь, примерчик можно?
Мастер (2004-08-09 20:06:00) [20]SetThreadPriority ?