Необработанное исключение при использовании difftime ()

Я создаю программу, которая считывает данные о фейерверке из файла XML (например, тип, цвет, время запуска в миллисекундах и продолжительность и т. Д.). Затем он отображает фейерверк с использованием openGL в цикле.

Мой подход к этому состоит в том, чтобы иметь класс менеджера, который принимает вектор фейерверка xml read и перемещает их между 3 различными векторами: inactiveFireworks (те, которые еще не запущены), activeFireworks (те, которые должны быть анимированы) и depletedFireworks (те, которые будут возвращены в inactiveFireworks при запуске дисплея).

Чтобы проверить, нужно ли запускать фейерверк, мне нужно выяснить разницу между временем вызова менеджера фейерверков и текущим временем программы и умножить его на 1000, чтобы получить миллисекунды.

Например: если фейерверк из-за пожара на 3000, он будет вызван через 3 секунды для существования менеджера пожарной работы.

К сожалению, я получаю необработанную ошибку исключения в этот момент, и я не уверен, почему …

timeDifference = difftime(time(&currentTime),initTime) * 1000;

вот заголовочный файл:

#ifndef FWORKMANAGER_H
#define FWORKMANAGER_H

#include <Time.h>
#include <vector>
#include "firework.h"
class fworkManager
{
private:
time_t initTime;
time_t currentTime;
double timeDifference;

std::vector<firework*> inactiveFireworks;
std::vector<firework*> activeFireworks;
std::vector<firework*> depletedFireworks;

public:
fworkManager(std::vector<firework*> fListIn);
void drawAllFireworks();

void evolve();
void fireInactiveFireworks();
void moveActiveFireworks();
void moveDepletedFireworks();
void reset();
};

#endif

А вот и CPP.

#include <vector>
#include "LUtil.h"#include "fworkManager.h"
fworkManager :: fworkManager(std::vector<firework*> fListIn){
inactiveFireworks = fListIn;
time (&initTime);
}

//animates fireworks
void fworkManager::evolve(){
//check time against inactiveFireworks

fireInactiveFireworks();
moveActiveFireworks();
moveDepletedFireworks();
reset();
}

//draws fireworks as they come up
void fworkManager::drawAllFireworks()
{
std::vector<firework*>::iterator i;

for(i=activeFireworks.begin(); i != activeFireworks.end(); i ++)
{
(*i) -> draw();
}
}

//if fireworks are ready to fire, push them to active list
void fworkManager::fireInactiveFireworks()
{
timeDifference = difftime(time(&currentTime),initTime) * 1000;
std::vector<firework*>::iterator i;

for(i = inactiveFireworks.begin(); i != inactiveFireworks.end();)
{
if((*i) -> getBegin() <= timeDifference)
{
activeFireworks.push_back(*i);
(*i) -> explode();
i = inactiveFireworks.erase(i);
}else{
++i;
}
}
}

//animate each firework in the active list
void fworkManager::moveActiveFireworks()
{
std::vector<firework*>::iterator i;
for(i = activeFireworks.begin(); i != activeFireworks.end(); i++)
{
(*i) -> evolve();
}
}

//move fireworks that have met their duration requirement to the depleted list.
void fworkManager::moveDepletedFireworks()
{
std::vector<firework*>::iterator i;
for(i = activeFireworks.begin(); i != activeFireworks.end();)
{
if((*i) -> getLifeSpan() >= (*i) -> getDuration()  )
{
depletedFireworks.push_back(*i);

i = activeFireworks.erase(i);
}else{
++i;
}
}
}

//repopulates the inactive firework list and resets the time difference. Allows animation to loop.
void fworkManager::reset()
{
if(inactiveFireworks.empty() && activeFireworks.empty())
{
time (&initTime);
std::vector<firework*>::iterator i;
for(i=depletedFireworks.begin(); i != depletedFireworks.end();)
{
(*i) -> reset();
inactiveFireworks.push_back(*i);
i = depletedFireworks.erase(i);

}

}
}

Большое спасибо за любые предложения.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]