• 第五章 作业


    (1)作业是什么?

      你可以把作业想象成一个进程的容器,作用是限制一组进程的属性。读懂下面的示例函数,就差不多理解了。

    void StartRestrictedProcess()
    {
        bool bInJob =FALSE;   
        IsProcessInJob(GetCurrentProcess(),NULL,&bInJob);   
        if(bInJob)
        {
            Messagebox(TEXT("进程已经存在作业中"),TEXT(""),MB_OK|MB_ICONINFORMATION);
            return;
        }
        
        HANDLE hjob = CreateJobObject(NULL,TEXT("作业"));
        JOBOBJECT_BASIC_LIMIT_INFORMATION jobli ={ 0 };
        jobli.PriorityClass = IDLE_PRIORITYCLASS;//CPU 级别
        jobli.PerJobUserTimeLimit.QuadPart = 10000000;//进程每个时间不能超过1s
        jobli.LimitFlags = JOB_OBJECT_LIMIT_PRIORITY_CLASS | OB_OBJECT_LIMIT_JOB_TIME;
        
        SetInformationJobObject(hjob, JobObjectBasicLimitInformation,&jobli, sizeof(jobli));
       
        JOBOBJECT_BASIC_UI_RESTRICTIONS jobuir;
        jobuir.UIRestrictionsClass = JOB_OBJECT_UILIMIT_NONE; 
        jobuir.UIRestrictionsClass |= JOB_OBJECT_UILIMIT_EXITWINDOWS;  
        jobuir.UIRestrictionsClass |= JOB_OBJECT_UILIMIT_HANDLES; 
    SetInformationJobObject(hjob,JobObjectBasicUIRestrictions,
    &jobuir, sizeof(jobuir)); STARTUPINFO si = { sizeof(si) }; PROCESS_INFORMATION pi; CreateProcess(NULL, "CMD", NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, π); AssignProcessToJobObject(hjob,pi.hProcess); ResumeThread(pi.hThread); CloseHandle(pi.hThread); HANDLE h[2]; h[0] = pi.hProcess; h[1] = hjob; DWORD dw = WaitForMultipleObjects(2,h,FALSE,INFINITE); switch( dw-WAIT_OBJECT_0 ) { case 0: //线程被停止 break; case 1: break; } CloseHandle(pi.hProcess); CloseHandle(hjob); }
  • 相关阅读:
    Web.config配置详解
    vs2010下创建webservice
    WinForm如何调用Web Service
    Android动画的两种使用方式。
    ES6介绍
    django批量form表单处理
    django生命周期示意图
    django中的构造字典(二级菜单,评论树,购物车)
    django中介模型,CBV模型,及logging日志配制
    django中csrftoken跨站请求伪造的几种方式
  • 原文地址:https://www.cnblogs.com/WillingCPP/p/3001124.html
Copyright © 2020-2023  润新知