![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
И снова Service
Fiend © (2002-07-10 15:37:00)Вот код моего сервиса:
procedure TCRService.ServiceExecute(Sender: TService);
begin
while not Terminated do
begin
sleep(100);
CRService.ServiceThread.ProcessRequests(false);
end;
StopServer;
end;
Почему то нерегулярно но где то после третьего цикла Запуск-Останов, на останове выдаёт ошибку "Память не может быть read". Долго колупался, проверил все деструкторы своих объектов, что и как выполняеться, всё корректно. Утомился и сделал слегонца другой код:
procedure TCRService.ServiceExecute(Sender: TService);
begin
CRService.ServiceThread.ProcessRequests(true);
StopServer;
end;
И шо ви думаете, ошибка пропала!
С чем связано появление эррора, непонятно. Но очень нехочется чтобы в дальнейшем мой сервис вычудил что то с системой.
Гляданите ПОЖАЛУСТА
Fiend (2002-07-10 18:29:00) [1]То Skier ©
нет не в слипе.
Хотя я его и применил, чтобы основной поток при уничтожении, подождал слегка пока порождённые им трэды успели разрушиться
Skier (2002-07-10 18:28:00) [2]>Fiend
Т.е. дело в sleep-е или что-то более хитрое ?
Fiend (2002-07-10 18:26:00) [3]И всё же разобрался.
Дело было не в синхронизации, как некоторые мне на чате тыкали этим в лицо.
Просто пока останавливались дочерние потоки, главный поток, который их породил, успевал выгрузить библиотеки с функциями, которые использщовались дочерними потоками.
Это конечно можно назвать и синхронизацией, но слегка не в том смысле, как например синхронизация с ВЦЛ
Fiend (2002-07-10 16:00:00) [4]Если снести эту "Важнейшую" операцию, то как вы прекрасно понимаете, мой сервис тут же отрывает все ресурсы на себя. Оно и понятно. Можно конечно и убрать, не вопрос, тока вот зачем???
Я проверял, все дуструкторы и останавливающие процеды отрабатывают до конца!!!!
Ошибка же возникает ХЗ когда. И я так понимаю, что если моё разрушение отработало до конца, значит ошибку делает не мой код.
А кто, и почему???
Ведб Екзекуте я переделал не сильно, со смысловой точки зрения.
Skier (2002-07-10 15:54:00) [5]>Fiend
А если sleep(100) снести ?
Fiend (2002-07-10 15:53:00) [6]Шо даже намёков на мысли никаких нет??????