【问题标题】:wxWidgets application loop slideshowwxWidgets 应用程序循环幻灯片
【发布时间】: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


    【解决方案1】:

    什么是引擎?

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

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

    【讨论】:

      猜你喜欢
      • 2013-07-27
      • 1970-01-01
      • 2011-01-18
      • 2012-09-19
      • 2012-08-11
      • 2014-01-18
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      相关资源
      最近更新 更多