当前位置: 代码迷 >> QT开发 >> QThread多线程有关问题
  详细解决方案

QThread多线程有关问题

热度:142   发布时间:2016-04-25 03:03:33.0
QThread多线程问题求助
做了一个QMainWindow,它要和另一台电脑进行数据交互,同时将数据显示在界面上。意思就是,这个界面一方面在后台有数据的发送、接收、处理,一方面要用这些数据在主界面上展示些内容。我把它所有的处理函数都放在mainwindow的源文件里,现在越写越多,后来数据处理一多界面就卡死无响应。
现在想到多线程的方式改造这程序,把发送、接收、处理、显示分开。但是看帮助文档和书,都说什么子类化QThread,重新实现run函数。问题是我代码这么多,本身函数之间用信号槽连接进行调用,而且都在一个父类MainWindow中,很多需要交互和共享的数据我直接在构造函数里定义,直接拿来用就可以了,现在如何分开去run()还要进行正常交互完全糊涂。从来没搞过多线程,书上用的例子太简单了也描述得不清不楚,一看也没明白怎么去设计。比如一些很初级的问题,在什么地方子类化QThread(MainWindow?)、处理函数改到什么位置进行声明和定义、如何让他们之间进行数据交互和共享,整个都蒙圈了,希望大家可以帮忙解答一下啊!
------解决思路----------------------
写一个 QObject 的子类 myObject,将你说的recv(), send(), handleData()放到这个子类中实现, 界面显示放到你的mainwindow中处理,然后在你的mainwindow的构造函数中这样写:

mainwindow::mainwindow(...)
{
      myObject *obj = new myObject;
      QThread  *thread = new QThread;
      obj.moveToThread(thread);
      thread.start();
}

差不多是这个流程,这样可以把业务分离开,把QThread当成一种资源使用,当myObject中的 3 个函数执行的时候,会在子线程中执行。