Почему возрастает нагрузка на память и GPU при сворачивании окна, созданного через SDL2?
Добрый день, столкнулся с такой проблемой, что при сворачивании окна, созданного через SDL2 память забивается до 1 ГБ и GPU до 90%, но при повторном развертывании окна нагрузка падает.
В плане кода - он стандартный, как из любого простого туториала по создании окон и холста.
Причем такая проблема происходит если в цикле что-то рисуется.
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_QUIT:
run = false;
break;
case SDL_KEYDOWN:
break;
case SDL_KEYUP:
break;
case SDL_MOUSEBUTTONDOWN:
break;
case SDL_MOUSEBUTTONUP:
break;
}
}
Toster_someone, чтобы дать людям возможность ответить на твой вопрос, тебе необходимо предоставить полную информацию о предмете вопроса. Человек должен иметь возможность оценить состояние твоего кода.
Ты пишешь что в фоновом режиме у тебя процесс потребляет память и занимает ЦП.
Тебе стоит показать всю развязку цикла отрисовки и обработки сообщений связным блоком кода, чтобы на твой вопрос можно было ответить.
По текущим обрывкам можно только сказать что while (run) - это катастрофа, так быть не должно. А вот как быть должно, сказать невозможно, т.к. оценить состояние твоего кода возможным сейчас не представляется.
Toster_someone, хорошо, спасибо. Так видно лучше. Совсем замечательно будет если ты этот код поднимешь в вопрос, чтобы все люди могли его прочитать.
По самому коду. Тут у тебя две проблемы.
Первая - это нет ограничения частот отрисовки и симуляции. Это и приводит к резкому повышению нагрузки на CPU в неактивном состоянии. При чем практически всю нагрузку создает почти оголевший while (run). Большинство обращений к SDL в неактивном состоянии шунтируются и приводят лишь к фиктивной нагрузке переходами.
Проблема вторая - это отсутствие реакции на активацию и деактивацию окна. Реакция должна быть. Процесс должен перевести все свои системы в режим ожидания активации. Сделать это надо твоими руками. И если приложение у тебя многопоточное, то приостановить надо все потоки.
По ограничению частоты советую изучить этот ответ.
По реакции на деактивацию нужно читать документацию SDL, тут я уже не помогу т.к. никогда с SDL не работал.