最近在看《windows程序设计》一书,第三章中有一个关于线程优先级的例子,源代码如下:#include<windows.h>
#include<iostream>DWORD WINAPI ThreadIdle(LPVOID lpParam) //线程的入口函数,低优先级
{
int i = 0;
while(i++ < 10)
{
printf("this is a Idle thread\n");
}
return 0;
}DWORD WINAPI ThreadNormal(LPVOID lpParam) //线程的入口函数,高优先级
{
int i = 0;
while(i++ < 10)
{
printf("this is a Normal thread\n");
}
return 0;
}int main()
{
DWORD dwThreadID;
HANDLE h[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]);
return 0;
}书中所用的编译器是vc6.0,我用的是vs2008,但是无法达到书中的效果(高优先级的线程先执行) 我所看到的效果是两个线程出现的顺序是随机的,每次结果都不同请问这是为什么,谢谢
#include<iostream>DWORD WINAPI ThreadIdle(LPVOID lpParam) //线程的入口函数,低优先级
{
int i = 0;
while(i++ < 10)
{
printf("this is a Idle thread\n");
}
return 0;
}DWORD WINAPI ThreadNormal(LPVOID lpParam) //线程的入口函数,高优先级
{
int i = 0;
while(i++ < 10)
{
printf("this is a Normal thread\n");
}
return 0;
}int main()
{
DWORD dwThreadID;
HANDLE h[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]);
return 0;
}书中所用的编译器是vc6.0,我用的是vs2008,但是无法达到书中的效果(高优先级的线程先执行) 我所看到的效果是两个线程出现的顺序是随机的,每次结果都不同请问这是为什么,谢谢
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货