加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_梅州站长网 (https://www.0753zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux下Qt多线程服务,Linux Qt下简单的多线程编程

发布时间:2022-11-05 12:42:52 所属栏目:Linux 来源:
导读:  private:

  QString print_str;//要输出的字符串

  protected:

  void run();

  修改对应cpp代码:

  #include "childthread.h"

  #include //注意添加头文件

  chil
  private:
 
  QString print_str;//要输出的字符串
 
  protected:
 
  void run();
 
  修改对应cpp代码:
 
  #include "childthread.h"
 
  #include //注意添加头文件
 
  childthread::childthread(QObject *parent) :
 
  QThread(parent)
 
  {
 
  print_str = "default";//默认输出default
 
  }
 
  childthread::childthread(QString str)
 
  {
 
  print_str = str;
 
  }
 
  childthread::~childthread()
 
  {
 
  }
 
  void childthread::run(){
 
  //转换string为char*
 
  QByteArray ba = print_str.toLatin1();
 
  const char *debug_str = ba.data();
 
  while(1){
 
  qDebug(debug_str);
 
  sleep(1);
 
  }
 
  }
 
  注意这里:一定要先实例化QByteArray ba,不能用const char *debug_str = print_str.toLatin1().data(); 也不要用toAnsii().data();
 
  这样就完成了子线程的代码了linux 线程,下面通过主线程创建子线程。
 
  调用子线程
 
  修改main.cpp代码:
 
  #include
 
  #include "childthread.h"
 
  int main(int argc, char *argv[])
 
  {
 
  QString str = "child thread 2";
 
  childthread *t1;
 
  childthread *t2;
 
  t1 = new childthread();//创建线程1
 
  t2 = new childthread(str);//创建线程2
 
  t1->start();//相当于执行线程1的run函数
 
  t2->start();//相当于执行线程2的run函数
 
  while(1)
 
  {
 
  qDebug("main thread");
 
  sleep(1);
 
  }
 
  return 0;
 
  }
 
  接下来编译输出可以在控制台看到3个线程都在同时工作:
 
  6d92db02432f8eb4065e8dfba114ff3b.png
 
  另外终止线程使用:
 
  t1->terminate(); //终止线程1
 
  t1->wait(); //阻塞等待
 
  界面绘制问题
 
  这里要注意,在子线程中不要调用界面绘制函数,如果要使用可以采用子线程发射信号,主线程connect信号与槽,槽代码在主线程中执行。
 
  //子线程头文件中定义信号:
 
  signals:
 
  void change();
 
  //子线程cpp:重载的run函数中发射信号
 
  void childThread::run(){
 
  while(1){
 
  emit change();
 
  QCoreApplication::processEvents();//处理事件
 
  }
 
  }
 
  //主线程头文件定义槽
 
  public slots:
 
  void view_update();//绘制界面函数
 
  //主界面cpp连接信号与槽
 
  connect(thread, SIGNAL(change()), this,SLOT(view_update()));
 
  //这里的view_update中可以使用界面绘制函数,保证线程安全。
 
  PV操作问题
 
  如果在线程中使用PV操作的话注意,如果PV操作放在子线程中,阻塞的是子线程,如果放在主线程中阻塞的是主线程,(即使调用的程序是在其他线程)
 

(编辑:云计算网_梅州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!