在QT的界面工程中添加一个简单的线程socket通信
来源:互联网 发布:阿里云按量付费1g 编辑:程序博客网 时间:2024/06/08 08:36
最近在6410ARM板子上做了一个基于视频传输的WIFI小车,视频的采集、传输、小车的控制全在主线程内完成的,在实验小车时发现存在失控现象,所有在QT的现有程序中改写,把socket小车控制部分单独开了一个线程,发现小车运行的效果好多了。
在工程中添加C++类,myThread,继承与QThread,在myThread类中重新实现run()函数。一下是代码的简单实现。
#ifndef MYTHREAD_H#define MYTHREAD_H#include <QThread>#include <QTcpServer>#include <QTcpSocket>class myThread : public QThread{ Q_OBJECTpublic: explicit myThread(QObject *parent = 0);protected: void run();signals:private: //server QTcpServer *server; QTcpSocket *clientConnection; QByteArray recbuf; //QTimer *timerSer; char *buf; int fd; int reclen;public slots:private slots: void acceptConnection(); void readClient();};#endif // MYTHREAD_H
#include "mythread.h"#include <string.h>#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/ioctl.h>#include "mydrive.h"myThread::myThread(QObject *parent) : QThread(parent){ fd=open("/dev/mygpio",O_RDWR,0); if(-1==fd) { printf("open fd error\n"); } server=new QTcpServer(); clientConnection=new QTcpSocket();}void myThread::run(){ server->listen(QHostAddress::Any,5000); //监听 connect(server,SIGNAL(newConnection()),this,SLOT(acceptConnection()));//关联信号与槽 printf("run last\n"); exec();}void myThread::acceptConnection(){ clientConnection=server->nextPendingConnection(); //ui->labelListen->setText("connect..."); connect(clientConnection,SIGNAL(readyRead()),this,SLOT(readClient()));}void myThread::readClient(){ recbuf.clear(); recbuf=clientConnection->readAll(); //服务端读取数据 reclen=recbuf.size(); printf("recbuf len:%d\n",recbuf.size()); if(reclen>4) { reclen=reclen-4; }else{ reclen=1; } switch (recbuf[reclen])//小车的简单控制部分 { case 0x00: printf("stop\n"); stopRun(fd); break; case 0x01: printf("up\n"); break; case 0x02: printf("back\n"); backRun(fd); break; case 0x03: printf("left\n"); leftRun(fd); break; case 0x04: printf("right\n"); rightRun(fd); break; default: printf("error\n"); break; }}
其中mydrive.h是我定义的小车运动的函数,以及在.cpp文件中的upRun()等都是小车相关的GPIO控制函数。还有在线程中不可以调用任何界面类。
在主函数即main()函数中加入myThread mythread; mythread.start();来开启一个新的线程。
1 0
- 在QT的界面工程中添加一个简单的线程socket通信
- Qt学习 之 Socket通信(一个简单的例子)
- Qt 简单的 tcp socket 通信流程
- qt tcp socket简单的通信程序
- 在Qt工程中添加ui文件:使用/添加工程之外的ui文件
- Qt的socket通信
- 在MFC工程中添加一个有列表的对话框
- 异步Socket通信的一个简单示例
- 一个最简单的Socket通信例子
- 一个简单的socket通信聊天程序
- 一个简单的java socket通信程序
- 一个最简单的Socket通信例子
- 一个最简单的Socket通信例子
- 一个简单的NIO Socket通信程序
- 一个简单的socket通信例程
- 一个简单的Qt socket 程序
- Qt在pro中添加依赖库的简单方法
- 在Qt Creator的工程下添加子工程
- 一道简单的题被做的很难
- 关于genymotion安装的一些问题汇总
- 提高zxing生成二维码的容错率及zxing生成二维码的边框设置
- LightOJ 1294 Positive Negative Sign 求和的升级版 暑期练习T
- 栈帧
- 在QT的界面工程中添加一个简单的线程socket通信
- Mysql外检约束的参照操作
- 算分与数据结构 - 冒泡思想
- 第十五周程序-阅读程序-5
- 【leetcode】171. Excel Sheet Column Number
- Android Scroller大揭秘
- 第十二周项目1-实现复数类中的运算符重载(2)
- 完美cvCreateVideoWriter写出AVI文件为空的问题
- 第十二周上机实践项目4:String类的构造