• Как уменьшить загрузку процессора при свернутом окне программы?

    @Glace Автор вопроса
    C++ Developer
    Как бы не было удивительно, но программа в свернутом состоянии действительно захлебывается сообщениями WM_PAINT. Судя по всему в свернутом состоянии в программу прилетает сильно больше сообщений на перерисовку чем в несвернутом (мое предположение которое я даже проверять не хочу). Я попытался запретить перерисовку окна вызывая в case WM_SIZE: { if (wParam == SIZE_MINIMIZED) ... if (wParam == SIZE_RESTORED) ... } функции SendMessage(hWnd, WM_SETREDRAW, (WPARAM)false, NULL) и LockWindowUpdate(hWnd), но первая дала весьма странный результат (при отправке сообщения пропала иконка на панели задач и не только), вторая вообще никакого результата не дала. В результате глобально объявил переменную bool lock_draw = false и выставил ее в case WM_SIZE. Программа оперлась на костыль и пошла. Код стал выглядеть примерно так:
    bool lock_draw = false;
    bool Core::on_message(UINT message, WPARAM wParam, LPARAM lParam)
    {
        if (lock_draw && message == WM_PAINT) return false;
        ...
        switch(message) {
            ...
            case WM_SIZE: 
                if (wParam == SIZE_MINIMIZED) lock_draw = true;
                if (wParam == SIZE_RESTORED) lock_draw = false;
            ...
        }
    }
    p.s. Задавая вопрос отсекать сообщения отрисовки я пытался функцией IsIconic(hWnd), которая судя по профайдеру занимает процессорного времени не меньше чем функция отрисовки о_О.
    Ответ написан
    Комментировать