Changeset 3051 for trunk/src/kmk


Ignore:
Timestamp:
Jul 24, 2017, 12:59:59 PM (8 years ago)
Author:
bird
Message:

kmk,kWorker: More aggressive handling of --nice (and --priority) on windows.

Location:
trunk/src/kmk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kmk/kmkbuiltin/kSubmit.c

    r3039 r3051  
    383383                {
    384384                    char        szHandleArg[32];
    385                     const char *apszArgs[6] =
     385                    extern int process_priority; /* main.c */
     386                    char        szPriorityArg[32];
     387                    const char *apszArgs[10];
     388                    int         cArgs = 0;
     389                    apszArgs[cArgs++] = szExecutable;
     390                    apszArgs[cArgs++] = "--pipe";
     391                    _snprintf(szHandleArg, sizeof(szHandleArg), "%p", hWorkerPipe);
     392                    apszArgs[cArgs++] = szHandleArg;
     393                    if (pVarVolatile)
    386394                    {
    387                         szExecutable, "--pipe", szHandleArg,
    388                         pVarVolatile ? "--volatile" : NULL, pVarVolatile ? pVarVolatile->value : NULL,
    389                         NULL
    390                     };
    391                     _snprintf(szHandleArg, sizeof(szHandleArg), "%p", hWorkerPipe);
     395                        apszArgs[cArgs++] = "--volatile";
     396                        apszArgs[cArgs++] = pVarVolatile->value;
     397                    }
     398                    if (process_priority != 0)
     399                    {
     400                        apszArgs[cArgs++] = "--priority";
     401                        _snprintf(szPriorityArg, sizeof(szPriorityArg), "%u", process_priority);
     402                        apszArgs[cArgs++] = szPriorityArg;
     403                    }
     404                    apszArgs[cArgs] = NULL;
    392405
    393406                    /*
  • trunk/src/kmk/main.c

    r3041 r3051  
    863863{
    864864# ifdef WINDOWS32
    865   DWORD dwPriority;
     865  DWORD dwClass, dwPriority;
     866
    866867  if (process_affinity)
    867868    if (!SetProcessAffinityMask (GetCurrentProcess (), process_affinity))
    868       fprintf (stderr, "warning: SetPriorityClass (,%#x) failed with last error %d\n",
     869      fprintf (stderr, "warning: SetProcessAffinityMask (,%#x) failed with last error %d\n",
    869870               process_affinity, GetLastError ());
    870871
     
    872873    {
    873874      case 0:     return;
    874       case 1:     dwPriority = IDLE_PRIORITY_CLASS; break;
    875       case 2:     dwPriority = BELOW_NORMAL_PRIORITY_CLASS; break;
    876       case 3:     dwPriority = NORMAL_PRIORITY_CLASS; break;
    877       case 4:     dwPriority = HIGH_PRIORITY_CLASS; break;
    878       case 5:     dwPriority = REALTIME_PRIORITY_CLASS; break;
     875      case 1:     dwClass = IDLE_PRIORITY_CLASS;         dwPriority = THREAD_PRIORITY_IDLE; break;
     876      case 2:     dwClass = BELOW_NORMAL_PRIORITY_CLASS; dwPriority = THREAD_PRIORITY_BELOW_NORMAL; break;
     877      case 3:     dwClass = NORMAL_PRIORITY_CLASS;       dwPriority = THREAD_PRIORITY_NORMAL; break;
     878      case 4:     dwClass = HIGH_PRIORITY_CLASS;         dwPriority = 0xffffffff; break;
     879      case 5:     dwClass = REALTIME_PRIORITY_CLASS;     dwPriority = 0xffffffff; break;
    879880      default:    fatal (NILF, _("invalid priority %d\n"), process_priority);
    880881    }
    881   if (!SetPriorityClass (GetCurrentProcess (), dwPriority))
     882  if (!SetPriorityClass (GetCurrentProcess (), dwClass))
    882883    fprintf (stderr, "warning: SetPriorityClass (,%#x) failed with last error %d\n",
     884             dwClass, GetLastError ());
     885  if (dwPriority != 0xffffffff
     886      && !SetThreadPriority (GetCurrentThread (), dwPriority))
     887    fprintf (stderr, "warning: SetThreadPriority (,%#x) failed with last error %d\n",
    883888             dwPriority, GetLastError ());
    884889
  • trunk/src/kmk/w32/subproc/sub_proc.c

    r2912 r3051  
    548548#ifdef KMK
    549549        size_t exec_path_len;
     550        extern int process_priority;
    550551
    551552        assert (pproc->enmType == kRegular);
     
    716717                else if (argv[0])
    717718                        kmk_cache_exec_image(argv[0]);
     719
     720                switch (process_priority) {
     721                case 1: flags |= CREATE_SUSPENDED | IDLE_PRIORITY_CLASS; break;
     722                case 2: flags |= CREATE_SUSPENDED | BELOW_NORMAL_PRIORITY_CLASS; break;
     723                case 3: flags |= CREATE_SUSPENDED | NORMAL_PRIORITY_CLASS; break;
     724                case 4: flags |= CREATE_SUSPENDED | HIGH_PRIORITY_CLASS; break;
     725                case 5: flags |= CREATE_SUSPENDED | REALTIME_PRIORITY_CLASS; break;
     726                }
    718727#endif
    719728                if (CreateProcess(
     
    741750                        return(-1);
    742751                }
     752#ifdef KMK
     753                switch (process_priority) {
     754                case 1: SetThreadPriority(procInfo.hThread, THREAD_PRIORITY_IDLE); break;
     755                case 2: SetThreadPriority(procInfo.hThread, THREAD_PRIORITY_BELOW_NORMAL); break;
     756                case 3: SetThreadPriority(procInfo.hThread, THREAD_PRIORITY_NORMAL); break;
     757                case 4: SetThreadPriority(procInfo.hThread, THREAD_PRIORITY_HIGHEST); break;
     758                case 5: SetThreadPriority(procInfo.hThread, THREAD_PRIORITY_TIME_CRITICAL); break;
     759                }
     760                ResumeThread(procInfo.hThread);
     761#endif
    743762        }
    744763
Note: See TracChangeset for help on using the changeset viewer.