" QObject :: ~QObject:定时器不能从另一个线程停止"在C ++中

时间:2018-02-25 10:52:11

标签: c++ multithreading boost

我遇到了关于计时器的问题

  

QObject :: ~QObject:无法从另一个线程停止计时器

以下是我终端的日志数据。

$ ./boost_tutorials 
init done
All done. Exit safely!
QObject::~QObject: Timers cannot be stopped from another thread

这是我的C ++代码,带有来自boost的线程。我通过CMakeLists构建它。

#include <boost/thread.hpp>
#include <boost/chrono.hpp>
#include <iostream>
#include <opencv2/opencv.hpp>

class Robot {
public:
  Robot() {
    cap.open(-1);
    SYSTEM_QUIT = false;
    if (!cap.isOpened()) {
      cout << "Error opening the video" << endl;
      SYSTEM_QUIT = true;
    }
  }

  ~Robot() {
    destroyAllWindows();
    cout << "All done. Exit safely!" << endl;
  }

  void run() {
    boost::thread* t1 = new boost::thread(boost::bind(&Robot::imageProcCallback, this));
    boost::thread* t2 = new boost::thread(boost::bind(&Robot::simpleCallback, this));
    t1->join();
    t2->join();
  }

  void imageProcCallback() {
    Mat frame;
    int cc = 0;
    while(!SYSTEM_QUIT) {
      cap >> frame;
      if (!msgs.empty()) {
        Point pt(rand()%frame.cols, rand()%frame.rows);
        putText(frame, msgs.back(), pt, cv::FONT_HERSHEY_COMPLEX, 2, Scalar(0, 255, 0));
     }

     imshow(filename, frame);
     if (waitKey(5) == 27)
       SYSTEM_QUIT = true;
     }
     frame.release();
  }

  void simpleCallback() {
    while(!SYSTEM_QUIT) {
      int count = rand() % 100;
      std::string str = std::to_string(count);
      msgs.push_back(str);
    }
  }

private:
  string filename;
  VideoCapture cap;
  bool SYSTEM_QUIT;
  std::vector<std::string> msgs;
};

void main() {
  Robot robot;
  robot.run();
}

0 个答案:

没有答案