下列代码中,两个线程处于不同优先级,为何输出结果还是交替打印?#include <stdio.h>
#include <windows.h>DWORD WINAPI ThreadIdle(LPVOID lpParam);
DWORD WINAPI ThreadNormal(LPVOID lpParam);int main(int argc, char* argv[])
{
DWORD dwThreadID;
HANDLE h[2];

// 创建一个优先级为Idle的线程
h[0] = ::CreateThread(NULL, NULL, ThreadIdle, NULL,
CREATE_SUSPENDED, &dwThreadID);
::SetThreadPriority(h[0], THREAD_PRIORITY_IDLE);
::ResumeThread(h[0]); // 创建一个优先级为Normal的线程
h[1] = ::CreateThread(NULL, NULL, ThreadNormal, NULL,
0, &dwThreadID);

// 等待两个线程内核对象都变成受信状态
::WaitForMultipleObjects(
2,     // DWORD nCount  要等待的内核对象的数量
h,     // CONST HANDLE *lpHandles 句柄数组
TRUE,     // BOOL bWaitAll 指定是否等待所有内核对象变成受信状态
INFINITE);  // DWORD dwMilliseconds 要等待的时间
   
::CloseHandle(h[0]);
::CloseHandle(h[1]); return 0;
}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(" Normal Thread is running \n"); return 0;
}VS2008专业版编译输出如下:
Idle Thread is running
 Normal Thread is running
Idle Thread is running
 Normal Thread is running
Idle Thread is running
 Normal Thread is running
Idle Thread is running
 Normal Thread is running
Idle Thread is running
 Normal Thread is running
Idle Thread is running
 Normal Thread is running
Idle Thread is running
 Normal Thread is running
Idle Thread is running
 Normal Thread is running
Idle Thread is running
 Normal Thread is running
Idle Thread is running
 Normal Thread is running
请按任意键继续. . .

解决方案 »

  1.   

    为什么不把两个线程的优先级都设置上呢?
    其次,好像双核CPU也有点关系。
      

  2.   

    和双核有关系
    printf也会导致线程进入等待,把时间交给其他线程
      

  3.   

    可能是U的关系吧,换了台电脑,Intel的U,但是编译器是VS2010,输出如下:Idle Thread is running
     Normal Thread is running
     Normal Thread is running
     Normal Thread is running
     Normal Thread is running
     Normal Thread is running
     Normal Thread is running
     Normal Thread is running
     Normal Thread is running
     Normal Thread is running
     Normal Thread is running
    Idle Thread is running
    Idle Thread is running
    Idle Thread is running
    Idle Thread is running
    Idle Thread is running
    Idle Thread is running
    Idle Thread is running
    Idle Thread is running
    Idle Thread is running
    请按任意键继续. . .