Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2013, 09:59   #1
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию Служба ком-сокет

возникла необходимость написать данную переадресацию для работы удалённой телеметрической программы. вроде реализовывал до этого обычный проект который сворачивается в терей и нормально работает не загружая проц, но возникли некоторые неудобства использования такие как пропадание иконки из трея, закрытие диспетчерами программы или отключения автозапуска программы и тд. причины которые не всегда можно решить программными средствами или достаточно сложно для меня.

в итоге написал почти один в один службу. но она сильно тормозит комп, видимо я чего то не понимаю в логике работы службы хотя это только первый проект служб у меня.
Вопрос: почему тормозит и как сделать проверку на существование ком порта который планируется открыть.

используется компонент компорт вер 4.11, для простоты сделал путь конфига в c:\Program Files\COM_Soc\ он вбит в службе напрямую и соответственно для запуска требуется существование там конфиг файла. в общем если глянете то всё увидите.

служба проверялась на xp х86 и на виртуальной машине xp х86 в винде 7 х64
то есть она 32 битная(задумывалась).
Вложения
Тип файла: zip sl.zip (16.1 Кб, 8 просмотров)
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Старый 16.07.2013, 10:24   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...тоже писал службу для переадресации с COM-порта, и службу для взаимодействия с гугло-сервисом по отправке смс. При создании службы использовал флаг разрешения взаимодействия с рабочим столом, в основном теле слип на секунду, остальная логика, не относящаяся к службе, в отдельном потоке с sinhronize при необходимости взаимодействия с vcl, тормозов нет. Сырцы в одном из номеров РЛ в статье по взаимодействию с гуглом календарем, ваш архив не смотрел (не могу, под андрофоном).
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 16.07.2013, 11:51   #3
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

Вот нашёл тонкое место, тормоза возникают когда ком порт теряется или ещё не создан виндой (всякие конвертеры ком-усб). следовательно надо как-то выдернуть из этого компонента список существующих комов в системе и останавливать или заставлять засыпать этот компонент при отсутствии в списке нужного.

судя по вашему описанию вы использовали реализацию службы через событие Execute. я же реализовал через Start и Stop, у меня же нет постоянного просчёта ситуации в зависимости от времени, а вся прога основана на 2х событиях событие принятие с ком порта и событие принятия данных с сокета. вот на обработке ошибок
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Старый 16.07.2013, 12:32   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...по EXECUTE идет работа службы как таковой, старт и стоп присутствуют как и положено любой службе, а вот работа с портом осуществляется в отдельном потоке (читай выше).

Что касаемо подвисов при выдергивании устройства с эмуляцией виртуального порта, то служба к этому не имеет никакого отношения, такой же эффект будет и в обычном приложении. Отслеживать наличие устройства вы можете методами WMI, реестр и SetupAPI. По последнему варианту у меня есть даже библиотека GetNumCom.DLL, с помощью которой можно отследить на каких портах сидят гаджет/ы, его/их наличие, или имя устройств по порту.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 16.07.2013, 15:19   #5
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

всё. нашёл процедуру. в хелпе, (более внимательно перечитал).
Код:
EnumComPorts(Memo1.Lines);//выводим список в мемо для проверки лили можно в переменную если в службе
осталось понять как приостанавливать весь порт, буду читать хелп дальше, тяжко у меня с английским...
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Старый 19.07.2013, 10:53   #6
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

благодаря куче часов мучений и эксперементов удалось написать службу более менее адекватно реагирующую на пропадание ком порта без подвисания системы.
гляньте прогу может чего я пропустил ещё? или чего не так сделал?
Вложения
Тип файла: zip sl.zip (259.5 Кб, 13 просмотров)
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
IliaIT вне форума Ответить с цитированием
Старый 19.07.2013, 14:06   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,867
По умолчанию

Цитата:
Сообщение от IliaIT Посмотреть сообщение
гляньте прогу может чего я пропустил ещё? или чего не так сделал?
В работу с портами не всматривался.
Но есть одно серьёзное замечание.
Save_log('ошибка процедуры QueryPort'); это не запись лога. Это ССЗБ. Какую полезную информацию несет это сообщение? Неужели трудно записать в лог родное сообщение об исключении?
northener вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сокет останавливает другой сокет. batand C/C++ Сетевое программирование 2 09.10.2012 11:58
Вопрос по WinSock: "сокет=сокет." Ksardas13 C/C++ Сетевое программирование 2 27.11.2011 16:12
Параметры из ком. строки MalCer Общие вопросы Delphi 6 15.02.2010 18:05
Ком-порт! Gawwws Microsoft Office Excel 1 06.02.2010 20:40
Работа с ком-портом Gawwws Microsoft Office Excel 9 20.01.2010 17:41