![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 17.03.2009
Сообщений: 977
|
![]()
возникла необходимость написать данную переадресацию для работы удалённой телеметрической программы. вроде реализовывал до этого обычный проект который сворачивается в терей и нормально работает не загружая проц, но возникли некоторые неудобства использования такие как пропадание иконки из трея, закрытие диспетчерами программы или отключения автозапуска программы и тд. причины которые не всегда можно решить программными средствами или достаточно сложно для меня.
в итоге написал почти один в один службу. но она сильно тормозит комп, видимо я чего то не понимаю в логике работы службы хотя это только первый проект служб у меня. Вопрос: почему тормозит и как сделать проверку на существование ком порта который планируется открыть. используется компонент компорт вер 4.11, для простоты сделал путь конфига в c:\Program Files\COM_Soc\ он вбит в службе напрямую и соответственно для запуска требуется существование там конфиг файла. в общем если глянете то всё увидите. служба проверялась на xp х86 и на виртуальной машине xp х86 в винде 7 х64 то есть она 32 битная(задумывалась).
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
...тоже писал службу для переадресации с COM-порта, и службу для взаимодействия с гугло-сервисом по отправке смс. При создании службы использовал флаг разрешения взаимодействия с рабочим столом, в основном теле слип на секунду, остальная логика, не относящаяся к службе, в отдельном потоке с sinhronize при необходимости взаимодействия с vcl, тормозов нет. Сырцы в одном из номеров РЛ в статье по взаимодействию с гуглом календарем, ваш архив не смотрел (не могу, под андрофоном).
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 17.03.2009
Сообщений: 977
|
![]()
Вот нашёл тонкое место, тормоза возникают когда ком порт теряется или ещё не создан виндой (всякие конвертеры ком-усб). следовательно надо как-то выдернуть из этого компонента список существующих комов в системе и останавливать или заставлять засыпать этот компонент при отсутствии в списке нужного.
судя по вашему описанию вы использовали реализацию службы через событие Execute. я же реализовал через Start и Stop, у меня же нет постоянного просчёта ситуации в зависимости от времени, а вся прога основана на 2х событиях событие принятие с ком порта и событие принятия данных с сокета. вот на обработке ошибок
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
...по EXECUTE идет работа службы как таковой, старт и стоп присутствуют как и положено любой службе, а вот работа с портом осуществляется в отдельном потоке (читай выше).
Что касаемо подвисов при выдергивании устройства с эмуляцией виртуального порта, то служба к этому не имеет никакого отношения, такой же эффект будет и в обычном приложении. Отслеживать наличие устройства вы можете методами WMI, реестр и SetupAPI. По последнему варианту у меня есть даже библиотека GetNumCom.DLL, с помощью которой можно отследить на каких портах сидят гаджет/ы, его/их наличие, или имя устройств по порту.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 17.03.2009
Сообщений: 977
|
![]()
всё. нашёл процедуру. в хелпе, (более внимательно перечитал).
Код:
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 17.03.2009
Сообщений: 977
|
![]()
благодаря куче часов мучений и эксперементов удалось написать службу более менее адекватно реагирующую на пропадание ком порта без подвисания системы.
гляньте прогу может чего я пропустил ещё? или чего не так сделал?
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.
|
![]() |
![]() |
![]() |
#7 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,926
|
![]()
В работу с портами не всматривался.
Но есть одно серьёзное замечание. Save_log('ошибка процедуры QueryPort'); это не запись лога. Это ССЗБ. Какую полезную информацию несет это сообщение? Неужели трудно записать в лог родное сообщение об исключении? |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сокет останавливает другой сокет. | 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 |