找回密码
 立即注册
收起左侧

怎么实现串口大数据接收发送,现只能4096字节,而且传输卡

10
回复
11569
查看
[复制链接]
累计签到:48 天
连续签到:1 天
来源: 2018-12-5 14:53:30 显示全部楼层 |阅读模式
1Qter豆

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

1, 创建自定义线程类CCustomThread : public QThread。 在main()函数中创建主窗体对象mainWind, 以及CCustomThread对象pThread,在pThead中保存mainWind对象指针。 2, 创建自定义类CCustomEvent,用来保存需要发送的信号。该类派生于QEvent,其type可以设为QEvent::UserType+1 3, CCustomThread::run() { while (true) { // 发送组帧 // 发送数据 // 读取 ...
回复

使用道具 举报

累计签到:41 天
连续签到:1 天
2018-12-5 14:53:31 显示全部楼层
sshhxx 发表于 2018-12-6 10:18
您好,谢谢您的回答,可能刚接触这方面,不是很理解,你能用流程图把各个函数关系标出来么,

...

1, 创建自定义线程类CCustomThread : public QThread。    在main()函数中创建主窗体对象mainWind, 以及CCustomThread对象pThread,在pThead中保存mainWind对象指针。
2, 创建自定义类CCustomEvent,用来保存需要发送的信号。该类派生于QEvent,其type可以设为QEvent::UserType+1

3,  CCustomThread::run()
   {
          while (true)   {
                // 发送组帧
                // 发送数据
                // 读取数据
                // 接收解帧
                    // 在解帧接口内部将解帧后的数据保存到全局对象,然后用QApplication::postEvent(mainWind, event)发出,其中event的类型为CCustomEvent
         }
   }

4,为mainWind重写event(),
       bool  CMainWind:: event(QEvent* e) {
            if (e->type() == (QEvent::UserType+1)) {
                    // 从全局对象读取数据,展示到界面
            }
        }
回复

使用道具 举报

累计签到:48 天
连续签到:1 天
2018-12-5 22:15:45 显示全部楼层
我知道write每次只是发送8k的数据!
回复

使用道具 举报

累计签到:41 天
连续签到:1 天
2018-12-6 08:15:42 显示全部楼层
用独立线程收发数据并保存到全局缓冲区,用QApplication::postEvent(mainWindow, QEvent*)通知主界面读取缓冲区的数据,因为用多线程,所以缓冲区的读写访问需要加锁。需要定义事件类CustomEvent类,该类派生于QEvent,其type可以设为QEvent::UserType+1,主界面需要重写bool event(QEvent* e),并且在内部判断if (e->type() == CusTomEvent的type),然后读取全局缓冲区的数据并展示到界面。
回复

使用道具 举报

累计签到:48 天
连续签到:1 天
2018-12-6 10:18:48 显示全部楼层
baizy77 发表于 2018-12-6 08:15
用独立线程收发数据并保存到全局缓冲区,用QApplication::postEvent(mainWindow, QEvent*)通知主界面读取缓 ...

您好,谢谢您的回答,可能刚接触这方面,不是很理解,你能用流程图把各个函数关系标出来么,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

1, 创建自定义线程类CCustomThread : public QThread。 在main()函数中创建主窗体对象mainWind, 以及CCustomThread对象pThread,在pThead中保存mainWind对象指针。 2, 创建自定义类CCustomEvent,用来保存需要发  详情 回复 发表于 2018-12-7 11:30
回复

使用道具 举报

累计签到:48 天
连续签到:1 天
2018-12-7 11:23:55 显示全部楼层
数据不完整一部分原因是我在数据传输过程中一边传输,一边将数据显示,个人看法!
回复

使用道具 举报

累计签到:48 天
连续签到:1 天
2018-12-7 20:34:52 显示全部楼层
baizy77 发表于 2018-12-7 11:30
1, 创建自定义线程类CCustomThread : public QThread。    在main()函数中创建主窗体对象mainWind, 以及C ...

谢谢您,我现在只是调用serialport的一些库,但是今后我自己写应该会用到您现在跟我所说的,是阻塞式的吗?我也搞不太清除,我的问题解决了,还是要谢谢您!

点评

这种方案采用异步刷新的策略。有专门的收发线程负责数据收发处理及数据解帧,界面线程负责展示。收发线程采用异步通知的方式通知界面进行数据展示。  详情 回复 发表于 2018-12-8 10:40
回复

使用道具 举报

累计签到:41 天
连续签到:1 天
2018-12-8 10:40:43 显示全部楼层
sshhxx 发表于 2018-12-7 20:34
谢谢您,我现在只是调用serialport的一些库,但是今后我自己写应该会用到您现在跟我所说的,是阻塞式的吗 ...

这种方案采用异步刷新的策略。有专门的收发线程负责数据收发处理及数据解帧,界面线程负责展示。收发线程采用异步通知的方式通知界面进行数据展示。
回复

使用道具 举报

尚未签到

2023-1-5 15:21:57 显示全部楼层
问题解决了?数据可以一次性接收超过4096了嘛?
回复

使用道具 举报

累计签到:93 天
连续签到:1 天
2023-1-11 09:18:10 显示全部楼层
那必然啊,我现在看的书就是上面baizy77这个人写的,pyqt实战和C++老鸟
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2024-2-22 13:11:34 显示全部楼层
我遇到的几个程序都容易卡死闪退。是否也是这个原因?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了