Войти
ПрограммированиеФорумГрафика

Почему MSVS не использует на 100% процессор? (2 стр)

Страницы: 1 2
#15
(Правка: 13:26) 13:19, 6 мая 2021

werasaimon
> Короче, компилирую игру в Release с большим количеством объектов, которые рисую
> на экране через OpenGL/C++! А в итоге игра виснит, но процессор даже на
> половину не загружон! Как это понимать?
> Это типа видокарта виснит или что...?
Скорее всего твоя игра однопоточная, и она реально виснет из-за количества объектов. А процессор не нагружен на 100% потому что нагружен только 1 поток. Смотри какой поток грузит твоя игра и на сколько процентов. И поставь Sleep(1) уже в цикл, и лог какой нибудь времени кадра. А также лог этапов, чтобы понять на каком этапе повисло.

PS: только не забудь отключить лог времени кадра когда закончишь, а то какой нибудь задрот обнаружит гигабайтовые логи в твоей игре на следующее утро.


#16
14:22, 6 мая 2021

gamedeveloper01
> Если в программе есть Sleep(1) (в формах и WPF она автоматически присутствует в
> реализации цикла, а в консольном приложении самому нужно делать), то загрузка
> ядра в любом случае уже не будет 100%. Это признак правильной программы.

Вообще то никаких слипов быть не должно, для этого есть WaitForMultipleObjects.

#17
14:29, 6 мая 2021

gamedevfor
> Вообще то никаких слипов быть не должно, для этого есть WaitForMultipleObjects.

Вообще то никаких WaitForMultipleObjects быть не должно, для этого есть std::condition_variable

#18
(Правка: 14:57) 14:55, 6 мая 2021

rcsim
> Вообще то никаких WaitForMultipleObjects быть не должно, для этого есть
> std::condition_variable

std::condition_variable наверняка обращается к SleepConditionVariableCS который жрёт ресурсы системы.
Тогда как WaitForMultipleObjects практически ничего не жрёт.

#19
15:17, 6 мая 2021

Как вариант:

if (frame_dt < 0) {
  Sleep(1);
  update_frame_dt();
}

#20
15:49, 6 мая 2021

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

#21
16:20, 6 мая 2021

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

#22
16:44, 6 мая 2021

gamedeveloper01
> А в том, что ни одна программа и даже игра не должна себя считать важнее
> открытой вкладки с ютубчиком и музончиком и тормозить работу всей системы,
> сжирая весь проц.
расскажи-ка это разработчикам VS и Android Studio. Хром немного исправился в этом плане, раньше тоже много жрал (и сейчас не мало, но 20 вкладок спокойно открыть можно).

#23
16:46, 6 мая 2021

ronniko
> Если не повысить другой функцией точность работы Sleep.
> На Win 10 по словам msdn сделано грамотно повышение точность работы Sleep, в
> отличии от Win 7\Win XP.
я не заморачивался. Я просто поставил проверку, если нагрузка достаточная, то Sleep игнорируется (примерно как nes написал).

#24
20:04, 6 мая 2021

Mirrel
> В нагруженной системе, не должно быть ни какого Sleep (если нам конкретно не
> задали, что надо ожидать)
Нет никакого если. Если есть работа - то берёшь и работаешь, система сама отберёт контроль когда надо. Если ждём конкретного события - то это нужно делать через блокировку - WaitForMultipleObjects, GetMessage - чтобы система знала, чего, собственно, ждёт программа, и могла разбудить её сразу после наступления события, а не полчаса спустя, когда отработали все CompatTelRunner и SearchIndexer и системе реально больше нечего делать, кроме как погонять твою программу.
В 90% случаев, слипы, илды и циклы - это тормозной говнокод.

#25
(Правка: 20:25) 20:24, 6 мая 2021

Delfigamer, мы говорим о разных вещах. Я говорю конкретно про игры. Где высоконагруженный код может сменяться малой нагрузкой и обратно. И здесь

В 90% случаев, слипы, илды и циклы - это тормозной говнокод.
на 90% только этот "говнокод" только и спасает ситуацию (если он правильно написан).

Хотя мы вообще на разных уровнях общаемся... я напрямую с системой работаю избирая методы, которые я точно не улучшу, а ты используя все возможные и не возможные методы.

#26
21:44, 6 мая 2021

Код ничего не делает, а процессор занят на 100%, как же так получилось-то?

#include <thread>
#include <vector>

#include <Windows.h>

void ThreadProc()
{
  for (;;)
  {
//    Sleep(1);
  }
}

int main()
{
  std::vector<std::thread> threads;
  for (int i = 0; i < std::thread::hardware_concurrency(); ++i)
  {
    threads.push_back(
      std::thread(ThreadProc)
    );
  }

  for (auto& thread : threads)
  {
    thread.join();
  }
}
Страницы: 1 2
ПрограммированиеФорумГрафика