#include <windows.h>
#include <stdio.h>DWORD WINAPI ThreadIdle(LPVOID);
DWORD WINAPI ThreadAboveNormal(LPVOID);void main()
{
DWORD dwThreadId;
HANDLE hThread[2];    hThread[0]=::CreateThread(NULL,0,
ThreadIdle,NULL,CREATE_SUSPENDED,&dwThreadId);
    ::SetThreadPriority(hThread[0],THREAD_PRIORITY_LOWEST);
        hThread[1]=::CreateThread(NULL,0,
ThreadAboveNormal,NULL,CREATE_SUSPENDED,&dwThreadId);
::SetThreadPriority(hThread[1],THREAD_PRIORITY_ABOVE_NORMAL);

    ::ResumeThread(hThread[0]);
    ::ResumeThread(hThread[1]); WaitForMultipleObjects(2,hThread,TRUE,INFINITE);
::CloseHandle(hThread[0]);
::CloseHandle(hThread[1]);

}
DWORD WINAPI ThreadIdle(LPVOID lpPramater)
{
int i=10;
while(--i>0)
printf("Idle Thread Run   \n");
return 0;
}
DWORD WINAPI ThreadAboveNormal(LPVOID lpPramater)
{
int i=10;
while(--i>0)
printf("AboveNormal Thread Run  \n");
return 0;
}
这个程序为什么还会出现Idle Thread Run,表示不理解,望指教。

解决方案 »

  1.   

    可能原因很多
    1:不止一个cpu
    2:ResumeThread(hThread[1]);之前ThreadIdle就开始执行
    3:printf中间有等待行为
      

  2.   

    我的是一个cpu,还有WaitForMultipleObjects调用之前线程能被执行吗,等待行为是什么意思,数据运算是等待行为吗,求教!
      

  3.   

    printf中会干很多事情,比如WriteFile,进入内核后向csrss发消息
      

  4.   

    优先级的作用是让优先级高的线程需要cpu时就能够得到cpu,而不是让优先级低的线程无法运行