QObject :: startTimer:无法从另一个线程错误启动计时器

时间:2018-06-01 09:49:01

标签: qt qml qthread

我正在获取QObject :: startTimer:无法从此片段中的另一个线程启动定时器,它会阻止我的应用程序并冻结UI。我对QT中的线程很陌生。

   void ReportModel::myslot(){
        moveToThread(&thread);
        connect(&thread, SIGNAL(started()), this, SLOT(exportProg()));
        thread.start();
    }

exportProg()我正在pendrive中制作一个csv文件。

1 个答案:

答案 0 :(得分:1)

鉴于ReportModel可能是从GUI线程使用的类,这不起作用,这是一个坏主意。除非您确切知道自己在做什么,否则this->moveToThread(...)通常是一种糟糕的代码味道。

为什么要将模型移动到插槽中的线程?它不应该从一开始就在线程中吗?为什么要将插槽连接到started信号?作业提交到当前对象线程的事件循环的习惯用法可以是QTimer::singleShot(0, ...)QMetaObject::invoke,并且在没有任何依赖于此时开始的线程的情况下工作。最有可能的是,exportProg应该是一个线程安全的方法,可以通过QtConcurrent::run提交异步执行。