SetThreadPriority не работает, хотя GetThreadPriority указывает, что это - PullRequest
0 голосов
/ 28 декабря 2018

Я вызываю 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 голосов
/ 28 декабря 2018

В Windows все пользовательские интерфейсы должны выполняться из одного потока.В частности, это должен быть поток, создавший главное окно

Нарушение этого правила может иметь неожиданные последствия.

...