Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-1132002044
S@shka
2005-11-15 00:00
2006.01.15
Удаление всех хранимых процедур в БД


2-1135419616
SergP.
2005-12-24 13:20
2006.01.15
TChart. Нужно отображать значения BottomAxis в формате даты/


14-1135330008
Непонимающий
2005-12-23 12:26
2006.01.15
Nexx NF-315


1-1134329319
SergP
2005-12-11 22:28
2006.01.15
Корректное вынужденное терминирование потока.


2-1135270904
Progger
2005-12-22 20:01
2006.01.15
вложенность записей





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский