Связь между двумя объектами qt в разных потоках через слоты и сигналы - PullRequest
0 голосов
/ 24 января 2020

Я хочу соединить два объекта qt, которые запускаются в разных потоках. (Download_webm и player)

int main(int argc, char *argv[])
{


    QApplication app(argc, argv);

    DownloadWebm *download_webm;

    MyThread *DownloadWebm_Thread = new  MyThread(download_webm);

    DownloadWebm_Thread->start();

    LinuWebmPlayer *player = new LinuWebmPlayer(argv[1],0);

    QObject::connect(download_webm,SIGNAL(send_packege(Video_Bytes_Package)),player,SLOT(play()));

    player->show();





    return app.exec();
}

Файл заголовка MyThread:

#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <qthread.h>
#include <downloadwebm.h>
class MyThread : public QThread
{
    Q_OBJECT

public:
    MyThread(DownloadWebm *&we);
    MyThread();


    DownloadWebm **getWebm() const;

protected:
    DownloadWebm **webm;
    void run();
};





#endif // MYTHREAD_H

и cpp:

#include "mythread.h"

MyThread::MyThread()
{

}

DownloadWebm **MyThread::getWebm() const
{
    return webm;
}

MyThread::MyThread(DownloadWebm *&we)
{
    webm = &we;
}

void MyThread::run()
{
   *webm = new DownloadWebm("http://trilulilu.de.de/recstreamingsource?movie=3860","asd");
}

Если я прокомментирую строку QObject :: connect от основного, все работает нормально, я что-то упускаю из-за связи между потоками в qt?

......... .............................................

Ответы [ 2 ]

0 голосов
/ 24 января 2020

Проблема в том, что с download_webm программа видит указатель как неинициализированный, так что я думаю, но я инициализировался в конструкторе легендарного мифа

0 голосов
/ 24 января 2020

Глядя на Qt docs , мы видим, что connect / disconnect:

Примечание: Эти функции также поточно-ориентированы:

и еще одна вещь, которую мы можем заметить, это то, что connect принимает Qt::ConnectionType, который сообщит Qt, как управлять соединением.

Пожалуйста, смотрите this , чтобы избежать неожиданностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...