Модераторы: Rickert

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 100-процентная загрузка CPU 
:(
    Опции темы
Tror
Дата 24.10.2005, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 29.4.2005
Где: Кишинёв

Репутация: нет
Всего: 4



Доброго времени суток, уважаемые игроделы.
Программированием графики занялся недавно
и поэтому вопровов пока больше чем ответов.
Начал я с уроков NeHe. На днях заметил одну
странную особенность программ на OpenGL --
даже каркас приложения неотображающий
ничего грузит проц на все 100 %. Сначала я
подумал, что хромает моя реализация программы,
но потом запустил екзешник от NeHe -- картина
та же самая. Почему так происходит?
--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
DENNN
Дата 24.10.2005, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 3
Всего: 43



Видеокарта без поддержки 3D, вот оно видимо и грузит проц.
PM ICQ   Вверх
srd
Дата 24.10.2005, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: нет
Всего: 49



Корень зла в цикле выборки сообщений. Следующая программа (заметьте, ничего общего не имеющая с OpenGL, DirectX, 3D и прочим) грузит процессор. В примерах от NeHe используется практически точно такой же код для цикла выборки оконных сообщений.
Код

#include <tchar.h>
#include <windows.h>

void render(void)
{
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
    switch (msg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hwnd, msg, wparam, lparam);
    }

    return 0L;
}

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, int nCmdShow)
{
    WNDCLASSEX wc = {0};

    wc.cbSize = sizeof(wc);
    wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW);
    wc.hCursor = LoadCursor(0, IDC_ARROW);
    wc.lpfnWndProc = WndProc;
    wc.lpszClassName = _T("SuperPuperWindowClass");
    RegisterClassEx(&wc);

    HWND hwnd = CreateWindowEx(0, wc.lpszClassName, _T("Грузим проц на 100%"),
        WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL );
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    MSG msg = {0};

    while (msg.message != WM_QUIT)
    {
        if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        else
        {
            render();
        }
    }

    return 0;
}

Проблема в том, что цикл крутится вхолостую даже тогда, когда нет оконных сообшений в очереди.

Нагрузку можно снизить так (по мотивам примеров из DirectX SDK):
Код

#include <tchar.h>
#include <windows.h>

bool isActive = false;

void render(void)
{
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
    switch (msg)
    {
    case WM_ACTIVATE:
        isActive = wparam != WA_INACTIVE;
        break;

    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hwnd, msg, wparam, lparam);
    }

    return 0L;
}

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, int nCmdShow)
{
    WNDCLASSEX wc = {0};

    wc.cbSize = sizeof(wc);
    wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW);
    wc.hCursor = LoadCursor(0, IDC_ARROW);
    wc.lpfnWndProc = WndProc;
    wc.lpszClassName = _T("SuperPuperWindowClass");
    RegisterClassEx(&wc);

    HWND hwnd = CreateWindowEx(0, wc.lpszClassName, _T("Грузим проц на 100%"),
        WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL );
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    MSG msg = {0};

    while (msg.message != WM_QUIT)
    {
        BOOL haveMessage = FALSE;

        if (isActive)
            haveMessage = PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE);
        else
            haveMessage = GetMessage(&msg, NULL, 0U, 0U);

        if (haveMessage > FALSE)
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        else if (isActive)
        {
            render();
        }
    }

    return 0;
}

Идея в том, что когда наше приложение не активно, то очередное оконное сообщение выбирается из очереди функцией GetMessage, а не функцией PeekMessage. GetMessage() не возвращает управление, пока не будет получено оконное сообщение, благодаря чему в неактивном приложении цикл останавливается.

У меня на машине первый вариант грузит проц на 100% не зависимо от того, активно ли приложение, или нет. Если работает второй вариант, то стоит переключиться на другое окно, как нагрузка падает до 0%.

Это сообщение отредактировал(а) srd - 24.10.2005, 14:05


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
Tror
Дата 24.10.2005, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 29.4.2005
Где: Кишинёв

Репутация: нет
Всего: 4



Ну вроде кое-что проясняется. Но всё же мне не нравится тот
факт, что когда окно активно оно все равно жрёт 100%.
Видюха у меня далеко не топовая (GeForce 256 32Mb +
дрова от Nvidia), но насколько я знаю у неё есть 3д ускоритель.
Насколько я знаю в дровах должна быть аппаратная
поддержка OpenGL. Может быть по умолчанию включается
софтварный режим. И как вообще это можно узнать?

Заранее благодарен.
--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
maxim1000
Дата 24.10.2005, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 2
Всего: 110



а почму бы и не съедать 100%, когда человек смотри 3d эффекты
ведь производительность не просто пропадает, она используется для повышения качества...
т.е. если пользователь, например, загрузит игрушку, а она ему грузит процессор на 50%, он спросит "почему не используются остальной ресурс процессора, чтобы сделать все еще красивее?"
Добавлено @ 15:59
конечно, совсем другое дело, если параллельно должны работать другие потоки или процессы... тогда уже надо как-то специфически регулировать распределение времени процессора...


--------------------
qqq
PM WWW   Вверх
Mad
Дата 24.10.2005, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: нет
Всего: 19



Цитата(Tror @ 24.10.2005, 13:31)
Но всё же мне не нравится тот
факт, что когда окно активно оно все равно жрёт 100%

Цитата(maxim1000 @ 24.10.2005, 14:58)
если параллельно должны работать другие потоки или процессы... тогда уже надо как-то специфически регулировать распределение времени процессора...

в обоих фразах нет полного понимания принципа распределения процесорного времени между приложениями.

Tror
100% загрузки - это не загрузка проца обним приложением, а показатель того, что все процесорное время занято приложениями (всеми в сумме, а не только этим), к томуже идет реч именно о времени, а не о выч. способности
например, несмотря на полную загрузку проца, остальные приложения в это время выполняються у тебя без особых тормозов smile (просто в это время все НЕИСПОЛЬЗОВАННОЕ время проца отдаеться этому приложению).


Добавлено @ 16:56
Цитата(Tror @ 24.10.2005, 13:31)
Насколько я знаю в дровах должна быть аппаратная
поддержка OpenGL. Может быть по умолчанию включается
софтварный режим.

Режим рендера только аппаратный (софтовая эмуляция присутсвует только в DirectX, в OpenGL ее и в помине нет)


--------------------
user posted image
PM MAIL   Вверх
maxim1000
Дата 24.10.2005, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 2
Всего: 110



просто я имел в виду такую ситуацию:
у игры (что поделаешь, это - первое что приходит в голову smile) есть несколько потоков, занимающихся своими делами
один из них - поток работы с графикой
но ведь другой поток вполне может оказаться более важным (ситуации всякие бывают)
тогда, нужно будет приостанавливать графический поток, т.к. он работает над полезным, но не необходимым повышением качества
Цитата
например, несмотря на полную загрузку проца, остальные приложения в это время выполняються у тебя без особых тормозов

далеко не факт
если есть приложение, которому нужно много процессорного времени (например, компиляция чего-то большого), то запуск подобного графического приложения может привести к замедлению первого раза в два...
это я и подразумевал под специальными ситуациями...


--------------------
qqq
PM WWW   Вверх
Mad
Дата 24.10.2005, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: нет
Всего: 19



Цитата(maxim1000 @ 24.10.2005, 16:02)
если есть приложение, которому нужно много процессорного времени (например, компиляция чего-то большого),

опять таки, не стоит путать понятия процессорное время,и нагрузка процессора, это разные вещи



--------------------
user posted image
PM MAIL   Вверх
maxim1000
Дата 24.10.2005, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 2
Всего: 110



Цитата
опять таки, не стоит путать понятия процессорное время,и нагрузка процессора, это разные вещи

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


--------------------
qqq
PM WWW   Вверх
Tror
Дата 25.10.2005, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 29.4.2005
Где: Кишинёв

Репутация: нет
Всего: 4



Да, признаюсь что тоже выразился не совсем корректно по
поводу процессорного времени, но ситуация для меня потихоньку
проясняется. Спасибо всем кто не прошёл мимо и постарался помочь.
Но тут по ходу чтения у меня возник ещё один вопросец:
Как я понимаю основная ф-ция render() выполняется в отсутствие
каких бы то ни было сообщений, т.е. всё свободное время уходит на
отрисовку сцены и чем больше раз выполняется render(), тем больше
fps. Собственно вопрос: если имеется
довольно мощная видюха и проц, то fps бывает зашкаливает за
нормальные 50-60(сам видел у друга на X850 fps = 500), т.е. мощность
тратится впустую. Можно ли ограничивать fps каким то определённым
значением, а всё оставшееся время использовать для расчётов. И,
вообще, целесообразно ли исползовать многопоточность в графических
приложениях. Если что не так поправьте.

Заранее благодарен.

--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
maxim1000
Дата 25.10.2005, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 2
Всего: 110



Цитата
Можно ли ограничивать fps каким то определённым
значением, а всё оставшееся время использовать для расчётов.

очень просто:
1. делаешь WaitableTimer на 1/50 секунды (для 50 fps)
2. вызываешь render()
3. вызываешь WaitForSingleObject

если render() отработала быстрее, оставшееся время поток будет заморожен и процессор ним использоваться не будет

если за 1/50 не успела, WaitForSingleObject сразу возвратится, и сразу начнется обработка следующего кадра

P.S.
про все, что связано с WaitableTimer и WaitForSingleObject можно почитать в MSDN...


--------------------
qqq
PM WWW   Вверх
srd
Дата 25.10.2005, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: нет
Всего: 49



maxim1000
А есть гарантия, что в результате "замораживания" основного потока с помощью WaitForSingleObject() активизируются другие потоки именно нашего приложения, а не какого-нибудь постороннего?


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
maxim1000
Дата 25.10.2005, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 2
Всего: 110



Цитата
А есть гарантия, что в результате "замораживания" основного потока с помощью WaitForSingleObject() активизируются другие потоки именно нашего приложения, а не какого-нибудь постороннего?

я не знаю тонкостей алгоритмов распределения процессорного времени между потоками и процессами Windows, но думаю, такой гарантии не будет

с другой стороны, если в это время не будет запущено каких-то "все время что-то делающих" приложений, наверное, бОльшая часть отойдет нашим (если они не будут замороженны, конечно)
Добавлено @ 14:17
можно, конечно, чего-нибудь поколдовать с приоритетами, но я с ними не работал...


--------------------
qqq
PM WWW   Вверх
DENNN
Дата 25.10.2005, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 3
Всего: 43



Цитата(srd @ 25.10.2005, 13:49)
А есть гарантия, что в результате "замораживания" основного потока с помощью WaitForSingleObject() активизируются другие потоки именно нашего приложения, а не какого-нибудь постороннего?

Вы вообще как себе многозадачность представляете? Это все равно что сравнивать линейное программирование и ООП. На ваш процес выделяется некоторое количество квантов процессорного времени. Другие процессы выполняются теоретически "параллельно". Если ваша задача не будет требовательна к ресурсам, а их в системе будет нехватка, то процеесороное время будет отданно процессу с большим приоритетом. Внутри процееса квант распеределяется между потоками. Не считая того, что процов может быть два или пень с HP. Тогды часть процессов в некоторыемоменты времени может выполняться одновременно для двух разных задач.


Цитата(Tror @ 25.10.2005, 13:28)
Как я понимаю основная ф-ция render() выполняется в отсутствие
каких бы то ни было сообщений, т.е. всё свободное время уходит на
отрисовку сцены

Честно говоря в лом разбираться в коде, но нужно иметь в виду, что в хорошем OGL приложении сцена перерисовывается в двух случаях:
1)По требованию ОС перерисовать часть окна или все окно целиком.
2)Если изображение изменилось
PM ICQ   Вверх
srd
Дата 25.10.2005, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: нет
Всего: 49



Цитата(DENNN @ 25.10.2005, 23:05)
Внутри процееса квант распеределяется между потоками.

Тут я запутался. "Квант" выделяется именно процессу, а не потоку? Т.е. под "квантом" подразумевают обычно нечто неделимое, как он может распределяться между потоками?


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
srd
Дата 25.10.2005, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: нет
Всего: 49



У Рихтера:
Цитата

Процессы инертны Чтобы процесс что-нибудь выполнил, в нем нужно создать поток Именно потоки отвечаю за исполнение кодя, содержащегося в адресном про странстве процесса В принципе, один процесс может владеть несколькими потока ми, и тогда они "одновременно" исполняют код в адресном пространстве процесса.

Для этого каждый поток должен располагать собственным набором регистров про цессора и собственным стеком В каждом процессе есть минимум один поток. Если бы у процесса не было ни одного потока, ему нечего было бы делать на этом свете, и система автоматически уничтожила бы его вместе с выделенным ему адресным про странством.

Чтобы всс эти потоки работали, операционная система отводит каждому из них определенное процессорное время. Выделяя потокам отрезки времени (называемые квантами) по принципу карусели, она создает тем самым иллюзию одновременного выполненияпотоков




--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
DENNN
Дата 25.10.2005, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 3
Всего: 43



Под квантом понимается временной отрезок, в течении которого управление будет переданно процессу и не будет выполняться проверка о необходимости передачи управления другому процессу. Как расперделяется время медлу потоками внутри процесса - вопрос немножко другой. Неделимым может быть отрезок и в 2 кванта и более. Обычно квант - верменной промежуток, меньше которого квантовать время не отимально. Это все грубо и достаточно неточно, но как суме, так и сказал. ... smile
PM ICQ   Вверх
mr.DUDA
Дата 25.10.2005, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 7
Всего: 232



Почитал тут посты, возникло предложение (не пинайте ногами сильно): что мешает перерисовывать кадр только когда это надо ? Например, мышка не двигалась, объекты в сцене не изменили своё положение, эффекты "молчат" -- нафига рисовать "поверх" того же самого ? smile

З.Ы, можно простым способом сделать: глобальная статическая переменная типа HANDLE с каким-нибудь объектом синхронизации, и ждущий поток. Поток рендерит кадр, потом "засыпает" в WaitForSingleObject. Если другие потоки, к примеру, передвинули камеру или объект в сцене - они сигналят первому потоку, он просыпается и рендерит ещё один кадр smile.

Цитата(Tror @ 25.10.2005, 13:28)
Можно ли ограничивать fps каким то определённым
значением, а всё оставшееся время использовать для расчётов. И,
вообще, целесообразно ли исползовать многопоточность в графических
приложениях. Если что не так поправьте.

Именно это и получится, если сделать как я предложил. Сигналить-то можно с любой требуемой скоростью.


--------------------
user posted image
PM MAIL WWW   Вверх
Tror
Дата 25.10.2005, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 29.4.2005
Где: Кишинёв

Репутация: нет
Всего: 4



Даа smile, я тут посмотрю придётся мне немног попотеть, чтоб разобраться во всём том, что
здесь написали. Большое всем спасибо -- дали пищу для размышлений. Всё, пошёл разбираться. smile
--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
maxim1000
Дата 25.10.2005, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 2
Всего: 110



о распределении времени:
я просто представил себе два возможных способа распределения времени:
1. глобально между процессами (независимо от количества активных потоков) и внутри них уже свои локальные шедулеры, которые делят полученное время между потоками
2. просто между процессами

в первом случае от замораживания потока доля процесса в использовании процессора не меняется, значит, при замораживании одного из потоков, его время будет распределено между остальными потоками этого же процесса

во втором случае усыпление одного из потоков приведет к распределению его части процессорного времени между всеми потоками в системе, а значит к потокам нашего процесса попадет только часть

Цитата
Почитал тут посты, возникло предложение (не пинайте ногами сильно): что мешает перерисовывать кадр только когда это надо ? Например, мышка не двигалась, объекты в сцене не изменили своё положение, эффекты "молчат" -- нафига рисовать "поверх" того же самого ?

насколько я понимаю, речь идет именно о моментах, когда что-то меняется, например, летят ут... пули, чем чаще будем менять картинку, тем плавнее они будут лететь...
и если моментов, когда вообще ничего не меняется становится ощутимая часть, тогда стоит подумать о какой-то специальной обработке (т.е. отключении отрисовки) этой ситуации...
другой вопрос - а часто ли такие моменты встречаются?


--------------------
qqq
PM WWW   Вверх
DENNN
Дата 26.10.2005, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 3
Всего: 43



Цитата(mr @ 25.10.2005, 19:05)
Почитал тут посты, возникло предложение (не пинайте ногами сильно): что мешает перерисовывать кадр только когда это надо ?

Читаем внимательно пердыдущую страницу:
Цитата(DENNN @ 25.10.2005, 15:05)
сцена перерисовывается в двух случаях:
1)По требованию ОС перерисовать часть окна или все окно целиком.
2)Если изображение изменилось


PM ICQ   Вверх
Tror
Дата 26.10.2005, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 29.4.2005
Где: Кишинёв

Репутация: нет
Всего: 4



smile В общем разобрался я в чем тут дело. Оказывается весь сыр-бор из-за того как мы выбираем
сообщения из очереди. Если использовать PeekMessage, то в таскмане отображается
использование проца на 100%, если же использовать GetMessage, то всё в порядке. Но тут возникает проблемка: при использовании PeekMessage всё в норме, а при GetMessage рабочая область программы закрашивается тем что было до нее на экране(окна, десктоп и тд). Посмотрел
в win32sdk help, там в ремарках к PeekMessage написано только то что он не ждёт окончания обработки сообщения в отличие от GetMessage. Глубже мне не удалось разобраться ввиду отсутствия MSDN(но вроде обещали подогнать), а пользоваься им в онлайне нет возможности.
smile

То maxim1000:
С днём рождения smile

Это сообщение отредактировал(а) Tror - 26.10.2005, 21:01
--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;)
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0691 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.