我使用QThread采用的是传说中的最好的方法"一种被开发人员强烈推荐,但Qt Manual和例子中只字未提的方法",也就是新建一个类派生QObject并使用movetothread函数。
void RunBundl::myrun()
{
emit mysigl();//给主线程发信号
BundlerApp::RunBundler();
}
class MainWindow: : public QMainWindow
{
。。。。
private:
RunBundl *mybundl;
}
在MainWindow的构造函数中我这样写道:
QThread *bdthread = new QThread(this);
mybundl = new RunBundl();
mybundl->moveToThread(bdthread);
connect(densepointAct, SIGNAL(triggered()), mybundl, SLOT(myrun())); //densepointAct与一个按钮对应
connect(mybundl,SIGNAL(mysigl()),this,SLOT(densepoint()));
bdthread->start();
void MainWindow::densepoint()
{
bool fanhui;
while(true)
{
delCurrentMesh();
fanhui = importMesh( "F:/points.ply");
Sleep(2000);
}
}
可以这么说,在线程执行 BundlerApp::RunBundler();时,主线程也在执行一段代码。然后程序显示
detected memory leaks dumping objects
QObject::killTimers: timers cannot be stopped from another thread
我想问下最后这句话暗含了什么信息?