Так что я делаю рендерер в C++ и opengl для моего класса. Я делаю анимационную программу для дополнительного кредита, который изменит значения в текстовом файле непосредственно перед тем, как мой рендерер прочитает их в каждом кадре. Моя проблема заключается в том, что этот раздел кода не записывается достаточно быстроБолее быстрые операции с файлами C++
while (clock() < time_end)
{
timeStep = clock() + fps * CLOCKS_PER_SEC;
for(int k=0; k < currOps.size(); k++)
{
// increase/decrease each set once for the current timestep
// a case for each operation
int pos = currAxis[k];
if(currOps[k] == "loc")
{
opsFile[8+pos] = patch::to_string(atof(opsFile[8+pos].c_str()) + locScale[pos-1]*timeAdjust);
//edit this value by loc adjust
}
else if(currOps[k] == "rot")
{
opsFile[4+pos] = patch::to_string(atof(opsFile[4+pos].c_str()) + rotScale[pos-1]*timeAdjust);
//edit this value by rot adjust
}
else if(currOps[k] == "scl")
{
opsFile[pos] = patch::to_string(atof(opsFile[pos].c_str()) + sclScale[pos-1]*timeAdjust);
//edit this value by scl adjust
}
}
currFile.close(); //save file and restart so we don't append multiple times
currFile.open(files[location[0]].c_str(), ofstream::out); // so we can write to the file after closing
for(int j=0; j <opsFile.size(); j++)
{
// update the file
currFile << opsFile.at(j);
currFile << "\n";
}
while(clock() < timeStep)
{
//wait for the next time steps
}
}
В частности, операции с текущим потоком в конце. Если я возьму операцию currFile, она будет работать с желаемыми fps. FPS установлен на .033, так что он делает 30 кадров в секунду. Также он будет работать достаточно быстро, если fps = 0,1. Любая оптимизация будет отличной. Если вам нужно увидеть какую-либо другую часть моего кода, дайте мне знать, и я загружу. Все это около 170 строк. currOps, файлы и opsFile векторы строк sclScale, rotScale и locScale векторы двойников currAxis является векторы Интс
Кроме того, opsFile вектор с около 12 линий. –
DragonTorchSlash
Интересно. Почему файл необходимо записывать в режиме реального времени? – LogicStuff
Оператор 'currFile << endl;' не только записывает новую строку, но также удаляет данные на диск.Скорее всего, вам нужен только первый, но не последний. Попробуйте вместо этого использовать 'currFile << '\ n';'. –