小编Kul*_*lki的帖子

什么是在linux上c ++/Qt中解雇和忘记线程的最简单方法?

我正在编写一个嵌入多个使用Qt同时运行的libVlc实例的应用程序.vlc库中似乎存在一个错误,如果从Qt的GUI线程调用,有时libvlc_media_player_stop会死锁.在其中一个videolan论坛上,接受的解决方案是从另一个线程调用stop函数.我正在寻找最少参与且不太难看的方法来从不同的线程调用stop.我看着使用QThreadPool,这意味着完全适用于这种情况,但在我的特殊情况下,它并没有使解决方案很好.

这是我的一段代码:

VlcWidget.h

    class VlcWidget : public QWidget
    {
        Q_OBJECT

    private:

        // State
        bool _isPlaying;

        // The streaming source, title and quality data
        VideoData _videoData;
        VIDEO_QUALITY _quality;

        // LibVlc related members
        libvlc_instance_t *_vlcInstance;
        libvlc_media_player_t *_vlcMediaPlayer;
        libvlc_media_t *_vlcMedia;
        int _vlcTrackID;
    }
Run Code Online (Sandbox Code Playgroud)

VlcWidget.c

    void VlcWidget::Play()
    {
        if(_videoData.Source() != "" && !_isPlaying)
        {
            // Create a new media descriptor
            _vlcMedia = libvlc_media_new_location(
                          _vlcInstance,
                          _videoData.Source().toStdString().c_str());

            // Tell the user about incorrect URL
            if(_vlcMedia == NULL)
            {
                QMessageBox::information(this,
                                         _videoData.Title(),
                                         "Unable to open source Url.\nPlease check …
Run Code Online (Sandbox Code Playgroud)

c++ linux qt multithreading

5
推荐指数
1
解决办法
922
查看次数

标签 统计

c++ ×1

linux ×1

multithreading ×1

qt ×1