gpt4 book ai didi

c++ - libvlc - 无法从回调中调用函数

转载 作者:太空宇宙 更新时间:2023-11-04 08:37:42 25 4
gpt4 key购买 nike

我正在编写 GTK/VLC 程序。与普通媒体播放器一样,我的程序应按如下方式运行:

  1. 双击播放列表(使用GtkTreeView实现)使播放器(使用libvlc_media_player实现)播放选定的媒体。
  2. 当到达媒体结束时,播放器 引发一个事件。此事件用于调用一个例程:
    • 播放列表中搜索下一个媒体
    • g_signal_emit 函数用于模拟播放列表中的双击事件,以便选择下一个媒体。

问题是 player 的函数“play”不能被 player 本身回调的同一个线程调用。

我怎样才能摆脱困境?

** 添加 **vlc 信号似乎是异步的,而 gtk 的则不是。有没有办法异步发出 gtk 的事件?

最佳答案

您必须启动另一个线程(或向另一个线程发送消息)并在那里运行命令。这是 libvlc 中回调的众所周知的问题。

我就是这样做的:

void player::libvlc_event( const struct libvlc_event_t* event )
{
//come from another thread
if( libvlc_MediaPlayerEndReached == event->type ||
libvlc_MediaPlayerEncounteredError == event->type )
{
if( mode_single != get_playback_mode() ) {
//to avoid deadlock we should execute commands on another thread
std::thread th( &player::next, this );
th.detach();
}
}
}

关于c++ - libvlc - 无法从回调中调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25534125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com