首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

线程优先级有关问题,求帮助

2013-06-26 
线程优先级问题,求帮助创建了两线程,优先级一个为最高,一个为最低,为什么运行结果是有的是两线程交叉运行,

线程优先级问题,求帮助
创建了两线程,优先级一个为最高,一个为最低,为什么运行结果是有的是两线程交叉运行,有的是一个先运行完再运行另一个,这和windows程序设计第2版(王艳平)里面说windows是不允许优先级相对低的线程占用CPU的不符合,求解释。
而且有时程序会运行出错,这又是为什么?

运行截图
线程优先级有关问题,求帮助
// 03PriorityDemo.cpp : Defines the entry point for the console application.
//
线程优先级有关问题,求帮助


代码如下
#include "stdafx.h"
#include<windows.h>
DWORD WINAPI ThreadIdle(LPVOID lpParam)
{
int i=0;
while(i++<10)
printf("Idle Thread is running \n");
return 0;
}
DWORD WINAPI ThreadNormal(LPVOID lpParam)
{
int i=0;
while(i++<10)
printf("Highest Thread is running \n");
return 0;
}
int main(int argc, char* argv[])
{
DWORD dwThreadID;
HANDLE h[2];

h[0]=::CreateThread(NULL,0,ThreadIdle,NULL,CREATE_SUSPENDED,&dwThreadID);
::SetThreadPriority(h[0],THREAD_PRIORITY_IDLE);//新创建线程优先级为THREAD_PRIORITY_IDLE

h[1]=::CreateThread(NULL,0,ThreadNormal,NULL,CREATE_SUSPENDED,&dwThreadID);
::SetThreadPriority(h[1],THREAD_PRIORITY_HIGHEST);//新创建线程优先级为THREAD_PRIORITY_HIGHEST

::ResumeThread(h[0]);//使线程开始运行
::ResumeThread(h[1]);//使线程开始运行

::WaitForMultipleObjects(
2,
h,
TRUE,
INFINITE);

::CloseHandle(h[0]);
::CloseHandle(h[1]);
return 0;
}
多线程 线程 优先级 线程优先级 Windows
[解决办法]
线程的优先级是动态变化的, 不是你设置一个就永远是那个值了.

热点排行