• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > 关于QThread多线程乱序的解决方法

关于QThread多线程乱序的解决方法

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了qthread,qt qthread,qthread start,qthread wait,qthread sleep等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:关于QThread多线程乱序的解决方法
描述:

多线程类class线程QT

定义QThread的派生类
class SendAndRecv:public Qthread
{
public:
     SendAndRecv();
    ~SendAndRecv();
...
protected:
    void run();
...
}
class ReadData:public Qthread
{
public:
     ReadData();
    ~ReadData();
...
protected:
    void run();
...
}
在主界面头文件中加上
SendAndRecv send_and_recv;
ReadData reader;
然后在主界面按钮的槽函数中添加
send_and_recv.start();
send_and_recv.wait();
reader.start();
reader.wait();
一开始总是会出现乱序的问题,界面上的按钮一点击程序就直接崩溃了,
后来我想了一个办法:
首先在两个QThread派生类的析构函数中都加上线程的退出或阻塞
SendAndRecv::~SendAndRecv()
{
        quit();
        wait();
}
ReadData::~ReadData()
{
        quit();
        wait();
}
然后删除主函数中的
SendAndRecv send_and_recv;
ReadData reader;
并声明两个函数
void SocketCall();
void Reader();
函数实现时
void Work::SocketCall()
{
        ...
       SendAndRecv send_and_recv;  
       send_and_recv.start();
}
void Work::Reader()
{
        ...
       ReadData reader;
       reader.start();
}
然后在槽函数中调用
void Work::on_PushButton_clicked()
{
       SocketCall();
       Reader();
}
程序就可以正常运行了,也没有再出现线程乱序的现象,我想问的是这样做真的可行吗?
如果可行的话又是如何实现线程退出或阻塞转入下一个线程的呢?


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 关于QThread多线程乱序的解决方法

相关文章

  • 2017-06-05 ISE软件中绑定管脚有几种方式
  • 2017-06-05 高分求word2000生成doc的详细文件结构
  • 2017-06-05 请教~急!新人怎么清除cc2530上下载过的程序?
  • 2017-06-05 新手提问,关于xpddk中mux的例子?
  • 2017-06-17嵌入式开发学习的十三大法则
  • 2017-06-05 我移植了8191su,然后用wpa_supplicant运行,/wpa_cli报错
  • 2017-06-05 关于driverstudio26的一个很急的问题
  • 2017-06-05 是否可以通过多个ip来访问internet
  • 2017-06-05 在驱动中睡眠和唤醒用哪些函数?
  • 2017-06-17ARM存储系统机制

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • STM32测量频率,现在测试100K-130K频率误差在8HZ-12HZ,不过当每次测量频率变化,测量出来的数值有些不稳定有些波动4HZ,怎么解决这个问题呢
    • 设备对象与具体的物理设备关系?
    • 关于driverstudio26的一个很急的问题
    • 关于移动平台下的驱动开发
    • 求取网卡mac地址
    • TIh264码流保存提问
    • 我写了个66的矩阵键盘程序,没按下的时候怎么显示有键按下,内有程序和原理图
    • ntstrsafe
    • 对于初学lua与cocos2dx结合做游戏,应该怎么起步呢
    • ESP8266模块如何加接软线天线

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有