Size: a a a

2020 December 24

DB

Dmitry Belkevich in Delphi & Lazarus
Ed Doc
стащил 😜
ну, копирайтов там точно не было ) вроде пост какой-то в конфе
источник

ED

Ed Doc in Delphi & Lazarus
ты же сам выложил. Заметь, без всяких лицензий 🤣
источник

DB

Dmitry Belkevich in Delphi & Lazarus
пользуйтесь 😂
источник

ED

Ed Doc in Delphi & Lazarus
А чо, мы все так учимся. Мне, например, не зазорно. Хотя я начинал на foxpro ещё в далёком 95м, а на Дельфи пересел 15 лет назад 😉
источник

DB

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

DB

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

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;
источник

DB

Dmitry Belkevich in Delphi & Lazarus
этого достаточно
источник

DB

Dmitry Belkevich in Delphi & Lazarus
тоже где-то с развалов утянуто )
источник

DB

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

DB

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

SB

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

Y

YuS in Delphi & Lazarus
Dmitry Belkevich
как нормально TDaemon юзать я увы так и не нашел. запилил свой класс. класса там пара строк
Спасибо, поковыряю.
источник

DB

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

ED

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

ED

Ed Doc in Delphi & Lazarus
Будет время, поправлю
источник

ED

Ed Doc in Delphi & Lazarus
Но с учётом оригинальной статьи
источник

ED

Ed Doc in Delphi & Lazarus
Если что, лучше автору англоязычного варианта претензии высказать
источник

DB

Dmitry Belkevich in Delphi & Lazarus
YuS
Спасибо, поковыряю.
демон форкается, вот как я написал, создается вот этот класс, крутится чек синхронайз до тех пор, пока не придет команда на остановку, разрушается класс. всё

 MakhaonDICOMStorage := TMakhaonDICOMStorage.Create(nil);
MakhaonDICOMStorage.ManageDaemon;
FreeAndNil(MakhaonDICOMStorage);
источник

DB

Dmitry Belkevich in Delphi & Lazarus
Ed Doc
Если что, лучше автору англоязычного варианта претензии высказать
я не тебе лично. я вот просто пишу, что лучше бы фигню поправить. еще лучше и в английской версии
источник

DB

Dmitry Belkevich in Delphi & Lazarus
сигналы от системы ловлю так:

 procedure DoSig(signal: longint; info: psiginfo; context: psigcontext); cdecl;
begin
 case signal of
  SIGTERM:
  begin
   WriteLog('Got SIGTERM message');
   MakhaonDICOMStorage.Terminate;
  end;
  SIGSTOP:
  begin
   WriteLog('Got SIGSTOP message');
   MakhaonDICOMStorage.Terminate;
  end;
  SIGPIPE: ;
  SIGUSR1: DumbException(nil, pointer(context.rbp));
 end;
end;

function SignalSet: longint;
var
 smask: TSigset;
 act: sigactionrec;
begin
 Result := 0;
 (* Signal mask setting *)
 FpsigEmptySet(smask);
 FpSigAddSet(smask, SIGSTOP);
 FpSigAddSet(smask, SIGTERM);
 FpSigAddSet(smask, SIGPIPE);
 FpSigAddSet(smask, SIGUSR1);
 act.sa_handler := SigactionHandler(@DoSig);
 act.sa_mask  := smask;
 act.sa_flags := 0;
 (* Signal exit function registered *)
 if FPSigaction(SIGSTOP, @act, nil) <> 0 then
  Result := fpgeterrno;
 if FPSigaction(SIGTERM, @act, nil) <> 0 then
  Result := fpgeterrno;
 if FPSigaction(SIGPIPE, @act, nil) <> 0 then
  Result := fpgeterrno;
 if FPSigaction(SIGUSR1, @act, nil) <> 0 then
  Result := fpgeterrno;
end;
источник