首页 > 编程知识 正文

qt多线程编程实例(qt多线程实现方法)

时间:2023-05-06 18:53:32 阅读:75679 作者:2226

QT多线程串口开发总结

1、优势

使用多线程技术可以最大限度地发挥CPU的性能。 我们在主线程上绘制UI和一些简单的工作(例如信号之间的传递),在子线程中完成海量数据的处理。

2、串行类构建

将串行端口封装到串行类中的一组接口函数。 串行端口初始化函数、接收缓冲区数据、数据处理函数。

3、主线程构建

在主线程中构建接口UI和一些简单操作,完成串行端口初始化,创建串行数据处理子线程。

4、子线程创建流程

新线程变量--将要添加的类移动到线程--运行该线程--发送线程执行信号--槽函数是该线程处理的任务

m_objThread=new QThread (; //新的多线程my port.move to thread (m _ obj thread ); 将串行类添加到m_objThread线程的m_objThread-start (; //运行子线程emit StartPortThread (; //发送执行子线程的信号的//线程执行信号和插槽connect(this,main window :3360 start port thread,myport,serial port :3360 port threread ) void串行端口:3360端口thread () while(1)/if )线程终止条件) }注意: connect(myport.serialport,signal ) ) readyry 如果在信号和槽函数位于同一线程上时使用默认值,则槽函数将不再启动。 如果找不到原因,Qt:DirectConnection参数可以解决无法启动槽函数的问题。

5、串行端口接收缓冲器的数据处理问题

serialport.readAll ) )才能调用sdgq缓冲区。 如果不需要缓冲区中的数据,则为serialport.readAll ) )函数,然后顺便在缓冲区中sdgq不需要的数据。 如果不调用此函数,则可以看到不需要的数据仍然存在于缓冲区中,并调用serialport .

if(receivebuff.length(maxlenth ) { receive buff=serial port.read all ); //读取缓冲区中的所有数据(else )串行端口. read all ); 读取超出MAXLENTH缓冲区的数据时,qt缓冲区中的数据只需调用此函数即可被清除。 (6、数据转换16圈QString、16圈10进制、10进制下QString

十六进制转换QString :

string serial port :3360 _ 16 tostring (q bytearray _ 16 data ) { QString str=_16Data.toHex; 返回str; (用十六进制转换为十进制

int serial port : _ 16to 10 (q bytearray _ 16 data ) return _ 16 data.toint (0,16 ); (十进制转换QString

strdata=qstring 33603360 number (current _ time.hour ();

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。