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

Вниз

TServiceApplication   Найти похожие ветки 

 
TheChups   (2005-02-21 20:37) [0]

Всем привет, есть задача написать сервис, который бы являлся сервером для чата (то есть постоянно висел в памяти). Для этого использую Service Application. Беру пример из хелпа (благо смысл один и тот же). Изменяю событие вот так:

procedure TServerService.ServiceExecute(Sender: TService);
begin
// Это добавляю я
Init; // Загрузка настроек из файла
ContactList := TStringList.Create; // Здесь хранится список юзеров

ServerSocket.Active := True;
while not Terminated do
begin
ServiceThread.ProcessRequests(True);
end;
ServerSocket.Active := False;
end;

И сервис сразу после загрузки операционки вываливается из памяти. Если процедуру Init закоментить, то сервис остаётся в памяти, но при этом не отвечает на запросы клиентов, хотя они к нему подключаюися без проблем. Такое ощущения что не создаётся переменная ContactList, тк всё инфа необходимая для взаимодействия сервер - клиент хранится в ней. Весь код сервиса был сначала написан для обычного приложения, там и тестировался, всё работало без проблем. Вот и вопрос как мне реализовать всё это дело и в чём проблема?


 
Fay ©   (2005-02-21 22:47) [1]

Я не очень-то разбираюсь в VCL-ных службах, но меня очень смущает
вот эта строка.
ContactList := TStringList.Create; // Здесь хранится список юзеров

IMHO, её место в конструкторе. А в ServiceExecute, полагаю, имеет смысл вставлять создание лишь специфичных для каждого коннекта объектов.

Здоровья Вам и счастья.


 
Digitman ©   (2005-02-22 08:50) [2]


> в чём проблема?


ну судя по


> Если процедуру Init закоментить, то сервис остаётся в памяти


поиски источников проблем следует искать как минимум в Init
видимо, где-то там возбуждается исключение, которое ты не ожидал и никак не обрабатываешь


> но при этом не отвечает на запросы


а это уже иная проблема
разберись сначала с первой


> Такое ощущения что не создаётся переменная ContactList


не следует полагаться на ощущения, а нужно просто воспользоваться тем или иным способом отладки сервиса, чтобы иметь инф-цию о реально происходящем в его алгоритме


 
Erik1 ©   (2005-02-22 11:43) [3]

Создай обычный поток и отладь его, а в сервисе(OnStart) запускай его. Получится двойная экономия и для сервиса подходит и в обычный exe слинковать можно. К томуже непридется на форум обращатся, по вопросам отладки.



Страницы: 1 вся ветка

Текущий архив: 2005.03.06;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.044 c
1-1109056820
Hadroran
2005-02-22 10:20
2005.03.06
Чтение генератора из InterBase


14-1108491536
Fr+++
2005-02-15 21:18
2005.03.06
Небольшой вопрос по PHP


14-1108616394
leonidus
2005-02-17 07:59
2005.03.06
Ищется компонентик для записи CD


14-1108057467
juice
2005-02-10 20:44
2005.03.06
Как в BCB работать с процедурным типом?


3-1107327777
cad2206
2005-02-02 10:02
2005.03.06
Ошибка в SQL запросе