Вверх ↑
Этот топик читают: Гость
Ответов: 2125
Рейтинг: 159
#16: 2006-12-04 23:27:21 ЛС | профиль | цитата
Vitaliy, загляни в Upload, я сделал-таки сервис.
http://hiasm.hexshock.com/xf/topic.php?p=42236#P42236
карма: 1

0
Ответов: 48
Рейтинг: 0
#17: 2006-12-05 09:08:45 ЛС | профиль | цитата
tsdima, Спасибо.

Все что касается событий при инициализации и остановке - разобрался. А вот с выходом работа сервиса - не пойму. Написано "Событие происходит переодически во время работы сервиса", у меня сразу возникает вопрос: "С какой периодичностью?" Так получается, что процесс занимает все свободное процессорное время... Пробовал поставить таймер (компонента Sleep) на этот вход, но он ее игнорирует - поток проходит через него не задерживаясь. Компонент Timer дает обратный результат - вообще не пропускает поток (не генерирует на выходе ничего) - возможно постоянно перезапускается.

Нельзя же все процессорное время отдавать своему сервису... надо как то регулировать его работу - частоту запускания. Или объясни пожалуйста как с ним работать по-другому, экономя ресурсы компьютера.
карма: 0

0
Ответов: 2125
Рейтинг: 159
#18: 2006-12-05 11:27:23 ЛС | профиль | цитата
Vitaliy писал(а):
С какой периодичностью

На данный момент каждые 50 миллисекунд, но можно это вынести в свойства (была такая идея). Цель этой точки - проверять наличие необходимой работы, и если надо что-то делать - то выполнить эту работу. Эту точку использовать необязательно, я даже хотел вынести её в опциональные, как onPause и onContinue. Кстати, если сервис приостановить, то события onStep не будут генерироваться.

Vitaliy писал(а):
процесс занимает все свободное процессорное время

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

Vitaliy писал(а):
Пробовал поставить таймер (компонента Sleep)

Использовать компонент Sleep не рекомендую, т.к. текущая реализация "занимает все свободное процессорное время". Кстати, если используешь doSleep, учти, что задержка в микросекундах, для задержки в миллисекундах есть doSleepMks.

Vitaliy писал(а):
Компонент Timer дает обратный результат ... возможно постоянно перезапускается

Логично.


А вот с компонентами, которые работают только при наличии обработчика очереди сообщений (дочерняя форма и всё что на ней, а также, скорее всего, TCP сокеты) пока не получится, т.к. его пока нет. Я думаю, надо будет добавить это в основной цикл работы сервиса.
А может и не надо, работа с интерфейсными элементами - это не для сервиса
карма: 1

0
Ответов: 48
Рейтинг: 0
#19: 2006-12-05 15:15:02 ЛС | профиль | цитата
tsdima, А возможно сделать, чтоб неактивная кнопка с рисунком (BitBtn) была затемнена. То есть рисунок был градациями серого (возможно придется 2 картинки загружать в комнонент, либо маску какую-то накладывать на рисунок). Есть такое свойство?
Еще по компоненте String Table вопрос: возможно ли растягивать записи по ширине - вписывать в окно таблицы. Сейчас все колонки одной ширины, я например использую 6, а последняя колонка все-рано отображается, хотя мне не нужна она.

[size=-2]------ Добавлено в 15:15
Как на счет сервисов? возможно ли изменять частоту опроса схемы по второму входу?
карма: 0

0
Ответов: 2125
Рейтинг: 159
#20: 2006-12-05 16:22:32 ЛС | профиль | цитата
Vitaliy писал(а):
Как на счет сервисов? возможно ли изменять частоту опроса схемы по второму входу?

Возможно, вот : http://hiasm.hexshock.com/xf/topic.php?p=42236#P42236

По поводу остального: сколько раз объяснять - пиши в соответствующей теме, тут ответов не по теме не будет.
карма: 1

0
Ответов: 48
Рейтинг: 0
#21: 2006-12-06 07:59:55 ЛС | профиль | цитата
tsdima, Продолжаем разговор!
А как на счет того, чтоб прямо в компоненту это свойство добавить?
карма: 0

0
Ответов: 2125
Рейтинг: 159
#22: 2006-12-06 11:33:47 ЛС | профиль | цитата
В смысле, чтобы программно менять во время работы? Можно, конечно.
Измени в hiNTService.pas:
    _event_onContinue:THI_Event;    
    _event_StepTime:THI_Event;    
CleanUp:procedure;

procedure Start;
procedure _work_doStepTime(var _Data:TData; Index:word);
procedure THINTService._work_doStepTime;
begin
_prop_StepTime := ReadInteger(_Data,_event_StepTime,0);
end;

end.

И в NTService.ini
[Property]
ServiceName=Системное имя сервиса|2|MyService
@StepTime=Переодичность вызова события onStep (миллисекунд)|1|50
*onContinue=Событие происходит при продолжении после приостановки сервиса.|2|
*StepTime=Переодичность, устанавливаемая по doStepTime|4|int
карма: 1

0
Ответов: 48
Рейтинг: 0
#23: 2006-12-06 11:36:02 ЛС | профиль | цитата
tsdima, НЕТ-НЕТ! Чтоб прям на компоненте NTService было это свойство (время запуска каждые N микросекунд/милисекунд например), ну или что-то подобное.
карма: 0

0
Ответов: 2125
Рейтинг: 159
#24: 2006-12-06 11:40:14 ЛС | профиль | цитата
Что-то я не понял, ты ставил NTService 1.1 ? Сходи по ссылке, в новой версии уже есть свойство StepTime, а эти изменения, что-бы можно было иметь точки doStepTime слева и StepTime сверху.
карма: 1

0
Ответов: 48
Рейтинг: 0
#25: 2006-12-06 11:43:24 ЛС | профиль | цитата
А, точно! Что-то с первого раза версия 1.1 не применилась... Сейчас вижу.
карма: 0

0
Ответов: 2125
Рейтинг: 159
#26: 2006-12-06 11:51:19 ЛС | профиль | цитата
Компоненты повторно пока не устанавливаются. Вообще-то это недоделка в HiAsm. Нафига тогда поле Version в .ini файле? На данный момент надо либо удалять компонент перед установкой новой версии, либо ручками копировать .pas и .ini
карма: 1

0
Ответов: 48
Рейтинг: 0
#27: 2006-12-06 16:16:36 ЛС | профиль | цитата
Угу. Ручками дописал. Теперь есть. Теперь сервис напишу. Посмотрим как работать будет.

Есть еще несколько вопросов по событиям сервиса, но пока не буду задавать.

Пока что сделал вот так. Не стал через HiAsm к диску сервера обращаться. Через внешний свой скрипт делаю, который и запускается сервисои периодически. Там заготовки уже есть в схеме - чтение из ini-файла, не обрашайте на них внимание. (code_700)

[size=-2]------ Добавлено в 14:41

не работает на windows 2003
на windows xp прогнал - все ок, а на 2003 не хочет! даже не знаю как оттестировать... то ли потитикой безопастности запрещен этот сервис, то ли еще что-то :-(

[size=-2]------ Добавлено в 15:26
tsdima, ты он-лайн не желаешь пововорить? ICQ или телефон?

[size=-2]------ Добавлено в 16:16
Ужас! А вот так даже в WinXP не работает! (code_701)
карма: 0

0
файлы: 2code_700.txt [1.7KB] [309], code_701.txt [1.8KB] [263]
Ответов: 2125
Рейтинг: 159
#28: 2006-12-06 16:17:48 ЛС | профиль | цитата
Vitaliy писал(а):
на 2003 не хочет

Мелкософт всегда в новой версии какие-нибудь палки в колёса вставляет. Например Shell Extensions сначала просто так работали, потом в NT/W2K добавили, что их CLSID нужно ещё в специальном ключе реестра Approved прописывать, иначе не запускаются. Теперь вот, видимо, и до сервисов добрались. А может сценарий работы с SCM Manager изменили, не интересовался ещё.

Vitaliy писал(а):
А вот так даже в WinXP не работает!

Ты бы не ставил такие большие задержки. 50-100 миллисекунд - самое то, если надо дольше - ставь Counter и когда дойдёт до нужного значения - делай что надо. Фактически, то время, которое указано в StepTime сервис находится в заторможенном состоянии и даже не обрабатывает очередь событий.
карма: 1

0
Ответов: 48
Рейтинг: 0
#29: 2006-12-06 16:19:28 ЛС | профиль | цитата
tsdima, получается нереально сервис мне написать... так и придется планировщиком пользоваться
карма: 0

0
Ответов: 2125
Рейтинг: 159
#30: 2006-12-06 16:27:16 ЛС | профиль | цитата
Если тебе нужно просто через какое-то время запускать скрипт - лучшего решения, чем планировщик - нет.
карма: 1

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)