wxWidgets应用程序循环幻灯片



我有一个很简单的问题,似乎无法解决。

我想写一个幻灯片放映程序,每次幻灯片更改时都会播放音频文件。这个音频文件的长度各不相同,我不想在声音播放完毕之前循环播放下一个条目/图片。

目前我已经实现了一个循环:

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/是一个"workers线程"的示例,这似乎正是我所需要的。

我现在的问题是:对于一个简单的幻灯片来说,线程不是有点过头了吗?有没有另一种更好的方式来循环浏览我的条目——等待声音播放,更新gui,还可以移动窗口?

什么是引擎?

大多数用于播放声音的API都提供了开始播放声音文件然后立即返回的功能。当声音结束时,他们将发送一个事件。它们还将提供一个呼叫来中断仍在播放的声音。这就是你想要的。

您应该检查文档中您正在使用的任何API并找到此功能。如果该功能不可用,那么您需要找到另一个API来做-大多数都做。

最新更新