读书人

关于设置线程优先级有关问题

发布时间: 2012-03-25 20:55:17 作者: rapoo

关于设置线程优先级问题!

C/C++ code
  #include<iostream>  #include<windows.h>  using namespace std;DWORD WINAPI Threadpro(LPVOID lp);DWORD dwThreadId[2];   void main()     {                HANDLE hthread1;           HANDLE hthread2;                 //创建两个线程,每个线程给予的标志都是挂起的。        hthread1=::CreateThread(NULL,NULL,Threadpro,NULL,CREATE_SUSPENDED ,&dwThreadId[0]);        cout<<"创建的第一个线程ID:"<<dwThreadId[0]<<endl;        hthread2=::CreateThread(NULL,NULL,Threadpro,NULL,CREATE_SUSPENDED ,&dwThreadId[1]);             cout<<"创建的第二个线程ID:"<<dwThreadId[1]<<endl;                  //修改两个线程的优先级。第一线程是高于正常,第二个线程是最低         ::SetThreadPriority(hthread1,THREAD_PRIORITY_ABOVE_NORMAL);                  ::SetThreadPriority(hthread2,THREAD_PRIORITY_LOWEST));                  //同时唤起两个线程                  ::ResumeThread(hthread1);        //::WaitForSingleObject(hthread1,INFINITE);这个行我注释掉了。        ::ResumeThread(hthread2);                  //因为设置时第二个线程低于第一个线程,所以等第二个线程结束关闭线程句柄。             ::WaitForSingleObject(hthread2,INFINITE);                ::CloseHandle(hthread2);        ::CloseHandle(hthread1);} DWORD WINAPI Threadpro(LPVOID lp){        int i=0;    while(i<20)    {        cout<<"这个线程正在运行:输出线程ID:"<<::GetCurrentThreadId()<<"程序输出数据:"<<i<<endl;        i++;            }    return  0;}

我想要的结果是,第一个优先比较高的线程先运行,而且运行全部结束。继续运行第二个线程。
但是程序的结果是。再第一个线程运行的时候,那个优先比较低的线程还是会运行。不是按照优先级规定运行。
想问下,为什么是这样子。还是我对线程的优先级理解错误!

[解决办法]
低优先级的线程并不是代表不能抢占到cpu,
多次io等待都会造成线程优先级提升,还有资源问题,长时间未获得会造成cpu饥渴,具体饥渴时间忘了,会提升优先级到最高,使低优先级线程能拿到所需资源
还有多核的情况下,也会有lz的情况

读书人网 >C++

热点推荐