Russian Qt Forum
Ноябрь 23, 2024, 10:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Загружено одно ядро процессора на 100% при использовании QWinHost  (Прочитано 4691 раз)
korel
Гость
« : Декабрь 02, 2010, 13:31 »

           Когда на qt окне(в моем случае QMainWindow) создаю HostWidget (дочерний класс QWinHost), одно ядро процессора загружается на 100%. Впедварительно в createWindow() :

Код:
HWND HostWindow::createWindow(HWND i_parent, HINSTANCE i_instance)//todo check for if needless
  {
  mp_wnd = new CWnd;
  BOOL created = mp_stl_wnd->CreateEx(WS_EX_CLIENTEDGE,
                                     _T("STATIC"),
                                     0,
                                     WS_CHILD | WS_VISIBLE,
                                     0, 0, 350, 200,
                                     i_parent, (HMENU)1001, 0);

  if(created)
    return mp_wnd->GetSafeHwnd();
  return NULL;
  }

С чем это может быть связано и как это пофиксить?
« Последнее редактирование: Декабрь 02, 2010, 13:33 от korel » Записан
korel
Гость
« Ответ #1 : Декабрь 02, 2010, 13:56 »

То, что было замечено, что в qeventdispatcher_win.cpp:
Код:
bool QEventDispatcherWin32::processEvents(QEventLoop::ProcessEventsFlags flags)
{
//..
while (!d->interrupt)
  {
    //..
  }
//..
}

цикл while выполняется милион раз за пару секунд(до 5ти секунд). Этот цикл обрабатывает сообщения системы(Windows) - он должен спать если сообщений нету. И непонятно, почему он выполняется такое количество раз?Непонимающий
Записан
korel
Гость
« Ответ #2 : Декабрь 02, 2010, 18:04 »

Вот, что прооисходило:

Когда приходит сообщение WM_PAINT ищутся его обработчики, и если их нету, то это сообщение кидается в конец очереди сообщений для того, чтобы когда нить обработаться. Таким образом получалось, что сообщения WM_PAINT шли в огромном количестве.

Поскольку в MFC_шном  CWnd методе OnPaint() я не написал BeginPaint-EndPaint (или как альтернативу CPaintDC paint_dc(this) ) обработчик событий не знал, что WM_PAINT есть кому обработать.

собственно все! Смеющийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.227 секунд. Запросов: 21.