我在尝试让我的应用程序在达到指定的执行时间后关闭时遇到问题。我创建了一个作业,设置了限制信息,为其分配了当前进程,但没有任何反应。我的代码:
SECURITY_ATTRIBUTES sa;
myJob = CreateJobObject(&sa, TEXT("oko"));
LARGE_INTEGER lint;
lint.LowPart = 1;
JOBOBJECT_BASIC_LIMIT_INFORMATION jbli;
jbli.PerProcessUserTimeLimit = lint;
jbli.LimitFlags = JOB_OBJECT_LIMIT_PROCESS_TIME;
SetInformationJobObject(myJob, JobObjectBasicLimitInformation, &jbli, sizeof(jbli));
AssignProcessToJobObject(myJob, GetCurrentProcess());
我认为这会使我的应用程序在 100 纳秒后关闭,但没有任何反应。这里有什么问题?
经过几个小时的“乐趣”与 winapi 文档,我放弃了这种方法,只是创建了另一个带有标志的进程(这实际上对我的问题更方便):
NORMAL_PRIORITY_CLASS | CREATE_BREAKAWAY_FROM_JOB
并且可以将此类过程分配给作业。为了成功创建作业,我遵循了 Roger Rowland 的建议并明确设置了 SECURITY_ATTRIBUTES 结构的参数。默认安全属性(CreateJobObject 中的 NULL)的工作方式类似。