我们如何在QtCreator中使用std :: thread?

时间:2018-02-03 19:24:03

标签: video-streaming qthread stdthread

我在c ++ 11中使用mdpeg流代码并使用std :: thread。设计得很好,我们很满意。我们尝试将这些代码放在QtCreator中,它编译并没有按预期运行。我们无法在浏览器中看到该流。这里基本代码:

在c ++ 11 main.cpp中:

int main()
{
  VideoServer video;

  thread video_thread([&video]() {
    video.run();
  });

  thread capture_thread([&video]() {
    VideoCapture cap;
    cap.open(0 + cv::CAP_ANY);
    if (!cap.isOpened()) {
      cerr << "Error";
      return -1;
    } 
    Mat frame;
    for (;;) {
      cap.read(frame);
      video.set_image(frame);
//      this_thread::sleep_for(chrono::milliseconds((int)(1000 / 20)));
    }
  });


  video_thread.join();
  capture_thread.join();
}

videoserver.hpp

class VideoServer {
private:

  SimpleWeb::Server<SimpleWeb::HTTP> server;
  std::mutex image_lock;
  std::condition_variable image_notify;
  std::vector<uchar> image;
  unsigned int active = 0;

public:

  void run();
  void set_image(cv::Mat& frame);
};

我们尝试使用:robotvision 集成QtCreator的源代码。

QtCreator中的

: main.cpp中

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

    QApplication a(argc, argv);
    Widget w;
    DigitalClock clock;
    JVideoServer jvideo;

//    thread video_thread([&jvideo]() {
//        jvideo.run();
//        cout << "videoThread started" << endl;
//      });


    w.show();
//    video_thread.detach();

    return a.exec();
}

我在Qt中的show_frame函数:

   jvideo.set_image(image);

将图像传递给Videostreamer线程。

所有内容都是在没有警告和软件工作的情况下编译的。

但这个帖子很慢(2-3次),VideoStreamer没有流,我们无法在浏览器中看到流媒体视频。

有什么想法吗?我们应该把这个std :: thread放在QtCreator中(我们熟悉了吗?)

由于

0 个答案:

没有答案