• 7406阅读
  • 1回复

QObject::killTimers: timers cannot be stopped from another thread [复制链接]

上一主题 下一主题
离线wjz2047
 

只看楼主 倒序阅读 楼主  发表于: 2013-11-21
我使用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

我想问下最后这句话暗含了什么信息?


离线dbzhang800

只看该作者 1楼 发表于: 2013-11-22
1. 你贴的代码体现不出你提到的这两个问题。内存泄露你自己检查自己代码即可。后面那个,翻译成中文即可。你试图在一个线程中停止处于另一个线程的中的定时器。而这是不允许的。

题外:你在主线程使用Sleep() ,这种用法是错误的。而且还有个while死循环??
快速回复
限100 字节
 
上一个 下一个