Re[12]: TService, TServiceThread, DLL
От: Strannic Россия www.new-point.ru
Дата: 24.05.05 11:30
Оценка:
D>Странненько... Проверь попадает ли в WndProc метод.

Да попадает.

D>Кажется я таки понял в чем твоя проблема. Timer — это те же Windows сообщения, соответственно их нужно обрабатывать, и причем в том же потоке где Timer был создан. Так как предложенный мною поток имеет реализацию обработки сообщений — то тебе абсолютно ничего не надо дописывать. Но одно но — создавать все Модули и стартовать плагины нужно именно в Execute. Конструктор Create потока для этих целей не подходит.


Т.е. мне необходимо иметь клас плагина, коий нужно экспортировать из DLL, причем незнаю как, и который создавать на Execute потока, а уже реализацию создания этого класса можно(нужно) делать в самой DLL плагина. Верно я понял? Или может лучше в этом случае плагины писать как потоки, но каждый плагин это один поток. Т.е. реализацию DLL делать как поток? А по событию останова сервиса вызывать функцию DLL, которая будет глушить этот поток.

Еще. А нужнен ли TDllThread.MyMessage2, ведь как только Execute отработает автматом будет вызван TDllThread.DoTerminate, может более коректно на нем производить остановку и выгрузку DLL, т.е. вместо

procedure TDllThread.MyMessage2(var Message: TMessage);
begin
  if HandleDLL <> 0 then StopPluggin;
  Terminate;
  FreeLibrary(HandleDLL);
end;

procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
  if DllThread <> nil then
    SendMessage (DllThread.WndHandle, MY_MESSAGE2, 0, 0);
  Stopped := True;
end;

сделать просто
procedure TDllThread.DoTerminate;
begin
  if HandleDLL <> 0 then StopPluggin;
  FreeLibrary(HandleDLL);
end;

что скажешь?

D>Думаю что все таки один сервис лучше Не будеш же ты из-за каждого плагина регистрить новый сервис


Поэтому и хотел смотреть в сторону плагинов к сервису. А что касаеться производительности там, загрузки проца и прочее, я понимаю, что щас это не критично, но все же? Так — что называеться для в общеобразовательных целях?
Любая проблема проектирования может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.