2013-11-23 42 views
0

我有一个相当简单的问题,我似乎无法解决。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类。在:wxwidgets/samples/threads /是一个“工作线程”的例子,这似乎是我需要的。

我现在的问题是:线程不是一个简单的幻灯片矫枉过正? 是否有另外一种/更好的方式循环播放我的条目 - 等待播放的声音,更新gui并且还能够移动窗口?

回答

0

什么是引擎?

大多数播放声音的API提供了开始播放声音文件然后立即返回的能力。当声音完成时,他们会发送一个事件。他们还会提供一个电话来中断仍在播放的声音。这是你想要的。

你应该检查你正在使用的API的文档并找到这个特性。如果该功能不可用,则需要找到另一个可以使用的API - 大多数都可以。