У меня довольно простая проблема, которую я не могу решить.wxWidgets application loop slideshow
Я хотел бы написать программу слайд-шоу, которая также воспроизводит аудиофайл каждый раз, когда слайд изменился. Эти звуковые файлы различаются по длине, и я не хочу программировать цикл через следующую запись/изображение, пока звук не закончит воспроизведение.
В настоящее время я реализовал цикл:
void UI_BRAINWASH::PlaySound_top()
{
wxString tmppath(parent->get_currentdirect()+parent->current_db.get_card(m_index)->get_topentryaudiopath());
ISound* firstsound = this->engine->play2D(tmppath.mb_str(), false, false, true);
while(engine->isCurrentlyPlaying(tmppath.mb_str()))
{
StaticTextTop->GetParent()->Update();
//wxSleep(3);
}
m_timer->Start(1000);
}
и это перебирает записи, как и ожидалось, и все денди ...
Однако, я хотел бы, чтобы способный прервать программу, нажав Escape среди других вещей, но цикл while явно мешает мне делать именно это. Я также заметил, что я не могу переместить свое окно или закрыть программу, пока она просматривает изображения.
Итак, я посмотрел на темы и класс wxIdleevent. in: wxwidgets/samples/threads/является примером «рабочего потока», который, похоже, мне нужен.
Мой вопрос сейчас: это потоки, которые не являются излишним для простого слайд-шоу? Есть ли еще один лучший способ перебирать мои записи - ожидая, что звук сыграет, обновит gui, а также сможет все еще перемещать окно?