Size: a a a

2020 December 24

RS

Renat Suleymanov in Delphi & Lazarus
Dmitry Belkevich
стандартный мастер создает какую-то увы лабуду )
Ну  я с помощью мастера не один демон создал. Вроде все работает норм. Причем кроссплатформенно. КОнечно, если нужно что-то специфическое, то можно свой TDaemon запилить. Но так это штатная возможность. Так и задумано для максимальной масштабируемости
источник

RS

Renat Suleymanov in Delphi & Lazarus
Dmitry Belkevich
демонизация линуховая. если кому нужна. она у меня отдельно от класса

SignalSet;
{$IFDEF DAEMONIZE}
Pid := FpFork;
{$ELSE}
Pid := -1;
{$ENDIF}
case Pid of
 0:
 begin { we are in the child }
  WriteLog('Fork process');
  Close(Input);  { close standard in }
  Close(Output); { close standard out }
  AssignFile(Output, '/dev/null');
  Rewrite(Output);
  Close(StdErr); { close standard error }
  AssignFile(StdErr, '/dev/null');
  ReWrite(StdErr);
 end;
 -1: {FSecs := 0};     { forking error, so run as non-daemon }
 else
  Halt;          { successful fork, so parent dies }
end;
👍 Прикольно, я на такой уровень реализации не углублялся )) ОСтавил эту работу мастеру Lazarus
источник

DB

Dmitry Belkevich in Delphi & Lazarus
может сейчас что-то поменялось. всё таки 4 года уже прошло с того времени, как я у себя демоны пилил )
может допилили до живого состояния уже и родные
источник

RS

Renat Suleymanov in Delphi & Lazarus
Dmitry Belkevich
к слову в русской вики мне кажется какая-то хрень написана )
может поправить?
https://wiki.freepascal.org/Daemons_and_Services/ru
вроде все верно?
источник

RS

Renat Suleymanov in Delphi & Lazarus
Dmitry Belkevich
я больше для того, что бы подтвердить свою правоту )
какое отношение несколько модулей имеют к многопоточности? )
Если я правильно понял. На каждый поток предлагается свой TCustomDaemon. Хотя лично я тупо я запускаю два потока внутри одного экземпляра TCustomDaemon. Возможно я не совсем корректен в этом
источник

DB

Dmitry Belkevich in Delphi & Lazarus
Renat Suleymanov
Эм... То что очереди передачи нет в не-LCL приложениях это да. По поводу OnTerminate использую и в консольных и в обычных. Или я не так понял
то есть в демоне нет обработки очереди и синхронизации? возможно это одна из причин отказа от встроенного кода
источник

RS

Renat Suleymanov in Delphi & Lazarus
Dmitry Belkevich
то есть в демоне нет обработки очереди и синхронизации? возможно это одна из причин отказа от встроенного кода
Как в LCL для Synchronize? Если так, я честно и не думал почему он тут должен быть
источник

DB

Dmitry Belkevich in Delphi & Lazarus
Renat Suleymanov
Как в LCL для Synchronize? Если так, я честно и не думал почему он тут должен быть
ну вот сказали: что для OnTerminate как минимум. потому как он сихнронный, а у меня на нем все потоки завязаны
ну и ничего конечно не работало
источник

DB

Dmitry Belkevich in Delphi & Lazarus
Renat Suleymanov
Если я правильно понял. На каждый поток предлагается свой TCustomDaemon. Хотя лично я тупо я запускаю два потока внутри одного экземпляра TCustomDaemon. Возможно я не совсем корректен в этом
на каждый поток процесса TCustomDaemon? зачем?
источник

DB

Dmitry Belkevich in Delphi & Lazarus
у меня все потоки порождаются от обычного TThread
источник

RS

Renat Suleymanov in Delphi & Lazarus
Dmitry Belkevich
на каждый поток процесса TCustomDaemon? зачем?
Как сказал выше могу ошибаться. И я так не сделал. Я просто предположил почему так написано в справке. ДУмаю для чего то это нужно )
источник

DB

Dmitry Belkevich in Delphi & Lazarus
не, мне кажется какая-то фигня написана )
источник

RS

Renat Suleymanov in Delphi & Lazarus
Dmitry Belkevich
у меня все потоки порождаются от обычного TThread
Ну у меня тоже как я сказал выше. Но возможно есть ньюансы, по которым то делается как в справке. Еще один довод на эту мысль. Ведь для чего замутили отдельный класс TDaemonMapper
источник

DB

Dmitry Belkevich in Delphi & Lazarus
там про другой класс:

TCustomDaemon
Данный класс реализует основную работу службы (демона) и является потомком TDataModule. Программа может использовать несколько классов TCustomDaemons и/или их экземпляров одновременно в одном процессе. Иными словами использовать много поточность в своей работе.
источник

DB

Dmitry Belkevich in Delphi & Lazarus
TDaemonMapper не наследуется от TCustomDaemon если что
источник

RS

Renat Suleymanov in Delphi & Lazarus
Dmitry Belkevich
TDaemonMapper не наследуется от TCustomDaemon если что
Я знаю. Ты меня не так понял
источник

DB

Dmitry Belkevich in Delphi & Lazarus
Вот прочитай, что в вики написано: Иными словами использовать много поточность в своей работе.
я не могу понять какое это отношение имеет к несколькими TCustomDaemon
источник

RS

Renat Suleymanov in Delphi & Lazarus
Хотя возможно предполагается, что можно сделать несколько демонов в одном приложении. Для этого TDaemonMapper и нужен
источник

DB

Dmitry Belkevich in Delphi & Lazarus
несколько демонов в одном бинаре? может как-то и можно. но к многпоточности это явно отношения не имеет
источник

RS

Renat Suleymanov in Delphi & Lazarus
Dmitry Belkevich
Вот прочитай, что в вики написано: Иными словами использовать много поточность в своей работе.
я не могу понять какое это отношение имеет к несколькими TCustomDaemon
Я сделал предложение, что возможно есть объямснение этому. И может просто так как мы с тобой это делаем тупо запуская потоки TThread - не совсем корректно. Возможно...  Я прочитал. В целом да, странно. В английском также написано кстати
источник