Qt多线程编程之moveToThread

moveToThread方法本质上就是将一个对象放在线程上去执行了
QThread官网文档
moveToThread文档
这里把我认为文档中需要注意的内容摘出来

  1. 一定要通过槽函数的形式去调用函数,
  2. 要注意!你创建的QThread对象实例,仍然存活在主线程上,而非子线程。所以如果你直接调用其中的函数,那么还是在主线程上运行的。
  3. 该方法并不是线程安全的。

注意事项

目前来看,moveToThread似乎是将主线程中的对象复制了一份到子线程,因为当我退出子线程的时候,他居然调用了这个对象的析构函数,而调用析构函数时的线程ID是子线程的ID。

  • 退出子线程
subThread.quit()

析构写法

Worker::~Worker()
{
    qDebug() << " dector"<<"thread id"<

Qt多线程操作数据库

注意事项

  • 一定要注意,QSqlDatabase不能跨线程使用,也就是一定要在本线程创建QSqlQuery对象。如果想在主进程中创建好数据直接调用子进程中的数据库操作,目前只能在主进程中创建QString,然后传到子进程中,在子进程中的再创建query,然后执行。

你可能感兴趣的:(C++,Qt,qt,c++,开发语言)