Я хочу отображать время, прошедшее при воспроизведении музыки в режиме реального времени.Базовый API FMOD обеспечивает функцию Channel::getPosition()
для получения текущей позиции в миллисекундах.Я хочу обновлять позицию каждую секунду.
Я новичок и не знаю многопоточного программирования.
Я вызываю Channel::getPosition()
в цикле и использую std::this_thread::sleep_for()
, чтобы задержать циклза одну секунду до следующей итерации.
Вот код:
unsigned int position = 0;
std::chrono::milliseconds timespan(1000);
while(true) {
channel -> getPosition(&position, FMOD_TIMEUNIT_MS);
std::cout << postion / 1000 << "\n"; //Display seconds
std::this_thread::sleep_for(timespan);
}
Тем не менее, я получаю некоторые ошибки:
0
1
...
13
13
14
16
...
13 появляется дважды и 15даже не появляется.В другом случае дважды появляется число 5.
Я думаю о округлении в большую или меньшую сторону числа, полученного из Channel::getPosition()
, чтобы исправить вывод.
Как это исправить?
Примечание: Проверка ошибок для простоты опущена