首先,创立一个继承Qthread的线程
class MapCanvas; //MapCanvas继承修改自QGraphicsView;
class RoadDetectionThread : public QThread
{
public:
RoadDetectionThread();
RoadDetectionThread(MapCanvas* pCanvas);
......
public:
/ //对外接口:准备、开启线程、等待线程结束、绘图
void RoadDetection(void* pIplImage, double roadWidth);
........
void run();
.........
}
void RSI_RoadDetectionThread::RoadDetection(void* pIplImage, double roadWidth) 中开启线程计算;
{
...........
//开启线程提取道路;
start();
while (this->isRunning())
{
progressBarValue += 8;
progress.setValue(progressBarValue % 100);
QThread::msleep(100); //注意:
}
}
run()中实现数据的计算和显示,注意这里的计算比较大时间比较久,程序也是主要卡在这里运行;(本来想多线程解决的,结果主窗口还是假死!~郁闷)
然后,在主窗口的一个按钮事件函数void MainWindow::on_detectRoadwayAction_triggered()中新建这个线程并启动接口函数:
{
........
m_pRoadDetectThread = new RoadDetectionThread(m_pCanvas);//主窗口的画布传给新线程;
m_pRoadDetectThread->RoadDetection(pImg, RoadWidth);
........
}
程序跑通没有问题,问题在于本来想用多线程解决计算部分时间长的问题,结果程序还是卡在新的计算线程,主窗口不可以动了。请教各位大大我的方法有什么问题、或者有什么可以解决的方法么?
谢谢!~!~!~!~!~