Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.15;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.033 c
2-1135612088
Volfram
2005-12-26 18:48
2006.01.15
TMemo, Lines


2-1135430678
Juk
2005-12-24 16:24
2006.01.15
Кривые


2-1135155643
Дмитрий_177
2005-12-21 12:00
2006.01.15
Про динамический массив


14-1134839795
utter
2005-12-17 20:16
2006.01.15
Borland Developer Studio 2006: Создание приложений для КПК


2-1135086695
Jumaric
2005-12-20 16:51
2006.01.15
Application