Windows 7中的进程和线程优先级

Windows 7中的进程和线程优先级,第1张

概述Windows 7中的进程线程优先级

我有一个简单的“培训”项目,必须在windows中显示优先级机制。

这是我的C ++代码:

#include <stdio.h> #include <windows.h> DWORD WINAPI Thread1(LPVOID); int stop; int sleep = 10000; struct params { int num; bool* runflg; }; long long counters[7] = {0,0}; int priority[7] = {THREAD_PRIORITY_IDLE,THREAD_PRIORITY_LOWEST,THREAD_PRIORITY_BELOW_norMAL,THREAD_PRIORITY_norMAL,THREAD_PRIORITY_ABOVE_norMAL,THREAD_PRIORITY_HIGHEST,THREAD_PRIORITY_TIME_CRITICAL}; int main(int argc,char* argv[]) { int thrds; if (argc < 2) stop = 5; else stop = atoi(argv[1]); bool runFlag = true; __int64 end_time; LARGE_INTEGER end_time2; HANDLE tm1 = CreateWaitableTimer(NulL,false,NulL); end_time = -1 * stop * 10000000; end_time2.LowPart = (DWORD) (end_time & 0xFFFFFFFF); end_time2.HighPart = (LONG) (end_time >> 32); SetWaitableTimer(tm1,&end_time2,NulL,false); //SetPriorityClass(GetCurrentProcess(),HIGH_PRIORITY_CLASS); printf("process priority = %d n",GetPriorityClass(GetCurrentProcess())); SetProcesspriorityBoost(GetCurrentProcess(),true); for (int i = 0; i < 7; i++) { DWORD targetThreadID; params* param = (params*)malloc(sizeof(params)); param->num = i; param->runflg = &runFlag; HANDLE t1 = CreateThread(NulL,Thread1,param,&targetThreadID); SetThreadPriority(t1,priority[i]); //задание приоритета PBOol ptr1 = (PBOol)malloc(sizeof(BOol)); GetThreadPriorityBoost(t1,ptr1); SetThreadPriorityBoost(t1,true); //запрет динамического изм. приоритета CloseHandle(t1); } WaitForSingleObject(tm1,INFINITE); runFlag = false; CloseHandle(tm1); printf("n"); for (int i = 0; i < 7; i++) { printf("%d - %ldn",i,counters[i]); } return 0; } DWORD WINAPI Thread1(LPVOID prm) { params arg = *((params*)prm); printf("thread # %d priority = %d n",arg.num,GetThreadPriority(GetCurrentThread())); while(1) { counters[arg.num]++; Sleep(0); if(*(arg.runflg) == false) break; } return 0; }

在代码中,我创build了7个具有不同线程优先级的线程。 每个线程都有自己的计数器。 程序应该运行约5秒钟,之后控制台必须显示线程的优先级和它们的值。 当我一年前在Win XP 32上做的时候,一切正常 – 一个优先级较低的线程的计数器值较小。 但是现在我有这样的奇怪结果:

process priority = 32 thread # 0 priority = -15 thread # 1 priority = -2 thread # 2 priority = -1 thread # 3 priority = 0 thread # 4 priority = 1 thread # 5 priority = 2 thread # 6 priority = 15 0 - 5401405 1 - 5726804 2 - 6676367 3 - 8320768 4 - 3223481 5 - 3085247 6 - 3177885

为什么优先级不工作,计数器有这样奇怪的值(不按升序sorting)?

sched_setscheduler是针对所有线程还是主线程?

windows Server 2008 R2(windows 7)上的命令提示符窗口优先级

如何在实时linux中select线程/进程优先级?

使用linux线程优先级和调度策略的指南?

SCHED_FIFO线程在linux中被SCHED_OTHER线程抢占

单独的线程优先检查使用命令行在linux中

SCHED_FIFO和SCHED_RR如何相互干扰?

C linux pthread线程优先

进程优先级与线程优先级

有没有办法执行系统命令给予优先?

怎么说@Zilog在这个问题的答案 – 一些奇怪的行动的原因是在MulTI-procces cpu。

如果有人想看看具有不同优先级的线程是如何工作的 – 他们必须使用特定的权限(如系统工作的monitor profilIEr),或者在程序中使用特殊的函数,只使用一个处理器。

总结

以上是内存溢出为你收集整理的Windows 7中的进程和线程优先级全部内容,希望文章能够帮你解决Windows 7中的进程和线程优先级所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1238714.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存