我正在获取QObject :: startTimer:无法从此片段中的另一个线程启动定时器,它会阻止我的应用程序并冻结UI。我对QT中的线程很陌生。
void ReportModel::myslot(){
moveToThread(&thread);
connect(&thread, SIGNAL(started()), this, SLOT(exportProg()));
thread.start();
}
在 exportProg()我正在pendrive中制作一个csv文件。
答案 0 :(得分:1)
鉴于ReportModel
可能是从GUI线程使用的类,这不起作用,这是一个坏主意。除非您确切知道自己在做什么,否则this->moveToThread(...)
通常是一种糟糕的代码味道。
为什么要将模型移动到插槽中的线程?它不应该从一开始就在线程中吗?为什么要将插槽连接到started
信号?作业提交到当前对象线程的事件循环的习惯用法可以是QTimer::singleShot(0, ...)
或QMetaObject::invoke
,并且在没有任何依赖于此时开始的线程的情况下工作。最有可能的是,exportProg
应该是一个线程安全的方法,可以通过QtConcurrent::run
提交异步执行。