wxWidgets应用程序循环幻灯片

时间:2013-11-23 10:51:54

标签: multithreading loops slideshow 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 /是“工作者线程”的一个例子,这似乎是我需要的。

我现在的问题是:对于简单的幻灯片,线程是不是有点过分? 有没有其他/更好的方式循环我的条目 - 等待声音播放,更新gui,还能够仍然移动窗口?

1 个答案:

答案 0 :(得分:0)

什么是引擎?

大多数播放声音的API都能够开始播放声音文件,然后立即返回。他们将在声音结束时发送一个事件。他们还会打电话来打断仍在播放的声音。这就是你想要的。

您应检查所使用的API的文档并找到此功能。如果该功能不可用,那么您需要找到其他API,大多数都可以。