const
jobName:
String = '
meinJob';
var
errorCode: Cardinal;
basicInfo: TJobObjectBasicLimitInformation;
extInfo: TJobObjectExtendedLimitInformation;
begin
// (1) Job-Objekt anlegen
jobHandle := CreateJobObject(
nil,
// Das Handle kann nicht vererbt werden
PWidechar(jobName)
);
if (jobHandle = INVALID_HANDLE_VALUE)
or (jobHandle = 0)
then begin
errorCode := GetLastError();
log('
Konnte kein Job-Objekt erstellen. Fehlercode ' +
IntToStr(errorCode) + '
: ' + SysErrorMessage(errorCode), ltError);
Exit;
end;
// Weitere interessante Job-Eigenschaften:
// JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION
// (2) Eigenschaften setzen
FillChar(basicInfo, SizeOf(basicInfo), 0);
if terminatePluginsOnJobClose
then
basicInfo.LimitFlags := JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;
FillChar(extInfo, SizeOf(extInfo), 0);
extInfo.BasicLimitInformation := basicInfo;
if not SetInformationJobObject(
jobHandle,
TJobObjectInfoClass.ExtendedLimitInformation,
@extInfo,
SizeOf(extInfo)
)
then begin
errorCode := GetLastError();
log('
Konnte Eigenschaften des erstellten Job-Objekts NICHT setzen! Plugins werden'
+ '
möglicherweise nach unerwartetem Beenden des Hauptprogramms NICHT beendet!'
+ '
Fehlercode ' + IntToStr(errorCode) + '
: ' +
SysErrorMessage(errorCode), ltWarning);
end;
end;