求助线程优先级问题!!!

[复制链接]
查看11 | 回复9 | 2021-1-27 06:09:32 | 显示全部楼层 |阅读模式
为何我设置了线程优先级没有起到作用?代码如下:
intmain(intargc,char*argv[])
{
DWORDdwThreadID;
HANDLEh[2];
h[0]=::CreateThread(NULL,0,ThreadIdle,NULL,CREATE_SUSPENDED,&dwThreadID);
::SetThreadPriority(h[0],THREAD_PRIORITY_IDLE);
::ResumeThread(h[0]);
h[1]=::CreateThread(NULL,0,ThreadNormal,NULL,0,&dwThreadID);
::WaitForMultipleObjects(2,h,TRUE,INFINITE);
::CloseHandle(h[0]);
::CloseHandle(h[1]);
return0;
}
运行后,发现结果如下
两个本该不同优先级的线程居然交互运行了,和没改变优先级一样?WHY??
求高手指导,不胜感激啊?我是XP系统

分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:09:32 | 显示全部楼层
看不到图...
任何线程都有运行的机会,某些线程长时间不运行,系统会动态提升优先级等等
回复

使用道具 举报

千问 | 2021-1-27 06:09:32 | 显示全部楼层
http://hi.baidu.com/aidilijie/blog/item/328f1a829817bda60df4d204.html
回复

使用道具 举报

千问 | 2021-1-27 06:09:32 | 显示全部楼层
你改变线程的优先级也不表示优先级比较低的线程不运行
回复

使用道具 举报

千问 | 2021-1-27 06:09:32 | 显示全部楼层
不好意思,图没贴好,图上显示的是先Idle,然后是Normal,两个线程就这样交互运行了,难道不是Normal先运行完,Idle才可以占用CPU的吗?谢谢大家的回复,图如下:


回复

使用道具 举报

千问 | 2021-1-27 06:09:32 | 显示全部楼层
引用4楼chenx1987的回复:不好意思,图没贴好,图上显示的是先Idle,然后是Normal,两个线程就这样交互运行了,难道不是Normal先运行完,Idle才可以占用CPU的吗?谢谢大家的回复,图如下:
图片挂了..换个图床
回复

使用道具 举报

千问 | 2021-1-27 06:09:32 | 显示全部楼层



回复

使用道具 举报

千问 | 2021-1-27 06:09:32 | 显示全部楼层
搞不定图片,大概就是这个意思,描述的比较清楚了。下面是图的内容
Idlethreadisrunning!
Idlethreadisrunning!
Normalthreadisrunning!
Idlethreadisrunning!
Normalthreadisrunning!
Idlethreadisrunning!
Normalthreadisrunning!
Normalthreadisrunning!
Idlethreadisrunning!
...
回复

使用道具 举报

千问 | 2021-1-27 06:09:32 | 显示全部楼层
入口函数如下:
DWORDWINAPIThreadIdle(LPVOIDlpParam)
{
inti=0;
while(i++<10)
{
printf("Idlethreadisrunning!\n");
}
return0;
}
DWORDWINAPIThreadNormal(LPVOIDlpParam)
{
inti=0;
while(i++<10)
{
printf("Normalthreadisrunning!\n");
}
return0;
}
回复

使用道具 举报

千问 | 2021-1-27 06:09:32 | 显示全部楼层
如果你是双核cpu当然可以同时运行,如果ThreadNormal中有阻塞的工作(printf很可能有等待),Idle也会运行
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行