zoukankan      html  css  js  c++  java
  • 第五章 作业

    (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); }
  • 相关阅读:
    android studio中timber的配置
    bufferknife框架的正确使用方式 -终于他么知道了
    开源的图像滤镜库----for Android
    HSV做通道分离是出现的Vector内存越界错误
    HSV与RGB的相互转换的公式
    Windows下python的第三方库的安装
    Python出现"Non-ASCII character 'xe6' in file"错误解决方法
    Verilog的IDE Quartus II
    Java-ZipUtil工具类
    Java-JDBCUtil工具类
  • 原文地址:https://www.cnblogs.com/WillingCPP/p/3001124.html
Copyright © 2011-2022 走看看