线程+定时实现Linux下的Qt串口编程

一、安装环境:

系统平台:Ubuntu-8.04,内核2.6.24-27-generic,图形界面

二、软件需求及下地地址:

Qt版本 qt-linux-SDK-4.6.2

注意:此处使用的是qt-linux-SDK-4.6.2版本,编译通过了,之后需要把他移植到qt-embedded-linux-opensource-src-4.5.3.tar.gz,通过qte编译后移植到开发板中,采用的测试开发板为Micro2440,

下载地址:略

三、程序编写过程

程序编程流程:

      先新建一个工程空白工程,再建立Ui文件,通过designer进行Ui界面设计,设计完保存,编译生成ui_mainwindow.h头文件,编写线程头文件及线程处理.cpp文件,建立串口处理头文件及 .cpp文件,最后完成main.cpp文件。

1、           Ui文件的设计:

建立Ui_MainWindow主窗口,在窗口上添加三个QPushButton,分别命名为closeButton、writeButton、readButton,再添加一个QTextBrowser显示串口接收数据,保存退出,编译一下就可以生成ui_mainwindow.h文件。

2、线程程序设计:

编写一个线程程序,其不需要进行界面设计,直接实现线程的管理,实现串口的收发工作,其主要程序及说明如下:

1) 新建一个thread.h头文件,内容如下:

#ifndef THREAD_H

#define THREAD_H

#include

class Thread:public QThread

{

Q_OBJECT

public:

Thread();

char buf[128];

volatile bool stopped;

volatile bool write_rs;

volatile bool read_rs;

protected:

virtual void run();

};

#endif

程序定义一个Thread类,它继承于QThread,设有一些变量和一个run函数,virtual表示为虚函数,你也可以去掉,加上去会增加一些内存开销,但提高了效率,对于这个小程序是看不出什么效果的,volatile为一函数数据类型,是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量,其可以在不同数据类型间进行转化,保证对此变量的读写操作都不会被优化。如果没有volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。

相关推荐