Форум: "Основная";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];
ВнизTService не дружыт с ADODB Найти похожие ветки
← →
Max Zyuzin © (2005-12-09 09:42) [0]Приветствую всех!
Не уверен с правильностью конфы... но
Пишу сервис, который должен по таймеру обрабатывать подошедшие файлики, обработка заключается в отправке различных SQL запросов на MSSQL сервер.
Значит создал сервис покидал на него таймер, TADOConnceion и TADOCommand
У сервиса onCreate читаю данные их ini файла все читается и страртуется таймер.
По событию таймера происходит обработка (процедура выполняется)...
Собственно она выполняется ровно до тех пор пока я не попытаюсь обратится к любому компоненту ADO причем не важно как... например
MainADOCommand.CommandText := "begin transaction";
Сервис уходит в себя и умирает тихо... что делать?
← →
Max Zyuzin © (2005-12-09 09:43) [1]Извиняюсь за ошибки...
← →
Digitman © (2005-12-09 10:00) [2]
> что делать?
разобраться с кодовыми потоками, в контексте которых исполняются те или иные обработчики событий объектов-наследников класса TService
← →
Max Zyuzin © (2005-12-09 10:12) [3]>Digitman © (09.12.05 10:00) [2]
Гм... звучит убедитльно. Почитал про Service Threads но в моем случае всего один поток, и один сервис.
← →
Digitman © (2005-12-09 10:15) [4]
> Max Zyuzin © (09.12.05 10:12) [3]
> в моем случае всего один поток, и один сервис
что есть "твой случай" ?
надо понимать, кроме OnCreate и OnDestroy никакие иные события TService ты никак не обрабатываешь ?
← →
Digitman © (2005-12-09 10:19) [5]OnCreate и OnDestroy любого объекта TService сервис-приложения выполняются в контексте основного кодового потока соответствующего сервис-процесса.
Все прочие события любого объекта TService того же сервис-приложения выполняются в контекстах соответствующих доп.кодовых потоков, ассоциированных с соответствующими объектами TServiceThread этого сервис-процесса.
← →
Max Zyuzin © (2005-12-09 10:54) [6]>Digitman © (09.12.05 10:19) [5]
То есть я так понял что все объекты созданые на OnCreate у сервиса не видны из обработчика событий у объекта TTimer?
А как сделать что бы это событие обрабатывалось в основном потоке сервиса?
← →
Digitman © (2005-12-09 11:15) [7]
> я так понял что все объекты созданые на OnCreate у сервиса
> не видны из обработчика событий у объекта TTimer?
Не правильно ты понял.
Видимость здесь ни при чем.
Видимость идентификатора - понятие, относящееся к compile-time, а не к run-time.
> как сделать что бы это событие обрабатывалось в основном
> потоке сервиса?
Оно и будет обрабатываться в основном потоке сервис-процесса, если строчка Timer.Enabled := True будет выполнена в нем же, а именно - в OnCreate/Destroy.
При этом создается невидимое окно, и сообщения WM_TIMER будут посылаться системой в адрес этого окна... а поскольку окно было создано в контексте осн.код.потока процесса, то и его обработчик (вызывающий, в кон.итоге OnTimer) так же будет вызываться/исполняться в том же контексте.
← →
Max Zyuzin © (2005-12-09 11:56) [8]>Digitman © (09.12.05 11:15) [7]
В общем разобрался я в этой проблемме... вы будете смеятся, но все заключалось в том, что сначала я создавал объекты ADO динамически,
в try... finally и перед созданием загонял все значения переменных в Nil компилятор пердупреждение выдавал.
Потом решил отказаться и создал в Disign-Time все эти объекты, закоментарил все кроме обнуленя переменных :( в результате у меня при обработке и говорило что я с удба рухнул ибо нету нифига не одного объекта ADO
Спасибо большое за помощь.
← →
Digitman © (2005-12-09 12:08) [9]все это расчудесно ..
не понятно только одно - нафих тут сервис вообще нужен ... если целевой код выполняется в контексте осн.трэда процесса, точно так же как он мог бы быть выполнен в контексте осн.трэда любого другого (не сервис) процесса
и к тому же обнаруживать "подошедшие файлики" по событиям таймера крайне неразумно
← →
Max Zyuzin © (2005-12-09 12:34) [10]>Digitman © (09.12.05 12:08) [9]
Первое что в голову пришло... (по поводу таймера) есть какие нить варианты?
А сервис понадобился, что бы работать не зависимо от основной программы, он будет работать на сервере и тихо, мирно перелопачивать все что приезжает, даже когда никто на сервер не залогинен...
← →
Digitman © (2005-12-09 15:29) [11]
> есть какие нить варианты?
см., например, ReadDirectoryChangesW
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.014 c