即使GetThreadPriority指示SetThreadPriority不能正常工作

时间:2018-12-28 17:21:46

标签: c++ multithreading visual-studio-2013 windows-7

我要在确认已设置优先级之后立即调用SetThreadPriority(m_hThread,THREAD_PRIORITY_ABOVE_NORMAL)并立即调用GetThreadPriority(m_hThread)。根据GetThreadPriority()的说法,SetThreadPriority()可以正常工作,但线程的性能不会改变。

我创建了一个线程来动画GIF动画。只要没有其他事情发生,GIF就会完美制作动画,但是只要进程的主线程忙起来,GIF就会冻结,直到主线程完成工作为止。

我尝试将线程提高到THREAD_PRIORITY_HIGHEST和THREAD_PRIORITY_TIME_CRITICAL,但是没有任何区别。当主线程忙时,GIF线程仍然冻结。

我已经阅读了所有可以在网上找到的有关线程优先级的信息,并且我的代码没有发现任何错误,因此我没有主意。

感谢您的帮助。

m_hThread = (HANDLE)_beginthreadex(NULL, 0, ThreadWrapper, this, CREATE_SUSPENDED, NULL);
DWORD dwThreadPriority1 = ::GetThreadPriority(m_hThread);
BOOL b = ::SetThreadPriority(m_hThread, THREAD_PRIORITY_ABOVE_NORMAL);
DWORD dwThreadPriority2 = ::GetThreadPriority(m_hThread);
ASSERT(THREAD_PRIORITY_ABOVE_NORMAL == dwThreadPriority2);
ResumeThread(m_hThread);

1 个答案:

答案 0 :(得分:2)

在Windows中,所有UI均应从同一线程完成。特别是,这应该是创建主窗口的线程

违反此规则可能会带来意想不到的后果。