【发布时间】:2013-11-23 10:51:53
【问题描述】:
我有一个相当简单的问题,我似乎无法解决。
我想编写一个幻灯片程序,该程序还可以在每次幻灯片更改时播放音频文件。此音频文件的长度各不相同,我不想编程循环播放下一个条目/图片,直到声音播放完毕。
目前我已经实现了一个循环:
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 并且仍然能够移动窗口?
【问题讨论】:
标签: multithreading loops slideshow wxwidgets