Разница во времени между выпускаемой и отладочной сборкамиC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Разница во времени между выпускаемой и отладочной сборками

Сообщение Anonymous »

Моя программа должна запускать событие каждые 180 секунд.

mFoodSpawnTime += dt;
if (mFoodSpawnTime > mFoodSpawnCycleLength)
{
..... etc;
}


mFoodSpawnCycleLength = 180.0f, а mFoodSpawnTime — еще одно число с плавающей запятой, время которого накапливается в каждом цикле.

Моя проблема в том, что если mFoodSpawnCycleLength составляет около 180.0f, то в релизной сборке он никогда не прибудет, и mFoodSpawnTime потребуется до 10 минут, чтобы быть > чем mFoodSpawnCycleLength! Я засек время сборки отладки, и она выполняет цикл через 180 секунд, и я проверил это с помощью секундомера. Вернёмся к релизной сборке: пока mFoodSpawnCycleLength не приближается к 180.0f, он также соответствует показаниям секундомера и выполняет код. Однажды я установил его на 120,0f, и когда он выполнился, секундомер показал 2 минуты 30 секунд. Не существует кода #ifdef DEBUG, который мог бы быть причиной этого.
Итак, я говорю следующее: чем ближе к 180,0f становится mFoodSpawnCycleLength, тем менее точным становится время, но только в релизной сборке!

Я только что распечатал mFoodSpawnTime, и когда мои часы показывали 3 минуты, их время составляло всего около 160 секунд, и я обнаружил, что по мере приближения таймера к 150 секундам приращение времени просто замедляется до остановки. Я отслеживал dt в каждом цикле, и он, кажется, ничем не отличается от того, что было в начале.

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

Я все еще учусь этому Я использую книгу DirectX.
Я используйте тайм-код из демо-версии, предоставленной книгой:

int D3DApp::run()
{
MSG msg;
msg.message = WM_NULL;

__int64 cntsPerSec = 0;
QueryPerformanceFrequency((LARGE_INTEGER*)&cntsPerSec);
float secsPerCnt = 1.0f / (float)cntsPerSec;

__int64 prevTimeStamp = 0;
QueryPerformanceCounter((LARGE_INTEGER*)&prevTimeStamp);

while(msg.message != WM_QUIT)
{
// If there are Window messages then process them.
if(PeekMessage( &msg, 0, 0, 0, PM_REMOVE ))
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}

// Otherwise, do animation/game stuff.
else
{

if( mTimeReset )
{
QueryPerformanceCounter((LARGE_INTEGER*)&prevTimeStamp);
mTimeReset = false;
}

if( !isDeviceLost() )
{
static float frameLimit = 0.0f;
__int64 currTimeStamp = 0;
QueryPerformanceCounter((LARGE_INTEGER*)&currTimeStamp);
float dt = (currTimeStamp - prevTimeStamp)*secsPerCnt;

if (dt > 2.0f) dt = 0.0f;

frameLimit +=dt;

updateScene(dt);
if (frameLimit > 0.0167f)
{
drawScene();
frameLimit = 0.0f;
}

// Prepare for next iteration: The current time stamp
// the previous time stamp for the next iteration.
prevTimeStamp = currTimeStamp;
}
}
}
return (int)msg.wParam;
}


Подробнее здесь: https://stackoverflow.com/questions/789 ... bug-builds
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Разница в поведении между JVM и местными сборками в Quarkus
    Гость » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Гость
  • Разница в поведении между JVM и местными сборками в Quarkus
    Anonymous » » в форуме JAVA
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Почему NtQuerySystemInformation не работает со сборками x32?
    Anonymous » » в форуме C++
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Next.js: предотвращение изменения имен статических CSS-файлов между сборками для поддержания целостности кэша
    Anonymous » » в форуме CSS
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Firebase не работает с успешными сборками Android, несмотря на правильную работу в редакторе
    Anonymous » » в форуме Android
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»