普通接收函数的改进(时间片->线程实现)
来源:互联网 发布:2000年流行网络歌曲 编辑:程序博客网 时间:2024/06/04 20:17
最最开始,我的数据接收是用wxwi中的定时器定时读取来实现的,定时器中函数如下:
void SComtestFrame::OnTimer1Trigger(wxTimerEvent& event){ static DWORD number; static DWORD i; if((number=serialPort->read_t(receiveBuf))>0) { if(hexflag) { for(i=0;i<number;i++) *TextCtrl1<<wxString::Format("%d",(unsigned char)receiveBuf[i])<<" "; } else *TextCtrl1<<receiveBuf; readed+=number; StatusBar1->SetStatusText(wxString::Format("%i",readed),1); delete[] receiveBuf; }}
这其中附带将数据显示在wxtextctrl中的处理,那个hexflag实际上是十进制显示。。。我当时找了一顿竟然发现不能简单的将char*指向的存储区的数值直接显示出来,所以用了这么个笨办法。
read_t函数如下:
DWORD mySerialPort::read_t(char*& readbuf) { if(num=GetCacheByteNum())//是否有数据 { if(num<0x100000)//大于1M? { readbuf=new char[num+5];//分配空间 readedBytes=Read(readbuf,num); readbuf[readedBytes]=0;//添加结束符 return readedBytes; } else return -1; } return 0; }
这种处理是每次读缓冲区所有数据并显示,但是接收高波特率,大量数据时会很容易没响应,也许把时间间隔设一点会好一些,但这样仍然阻塞了主线程,所以我决定还是将通信部分挪到单独线程去,主线程只负责图形界面显示与用户交互等。
我决定先去把图片显示出来再说。。。未完待续
0 0
- 普通接收函数的改进(时间片->线程实现)
- 普通进程的时间片用完后
- 线程/进程/时间片
- 理解 Thread.Sleep 函数 ,Sleep(0) 释放当前线程所剩余的时间片,让线程马上回到就绪队列而非等待队列
- 理解 Thread.Sleep 函数 ,Sleep(0) 释放当前线程所剩余的时间片,让线程马上回到就绪队列而非等待队列
- 理解 Thread.Sleep 函数 ,Sleep(0) 释放当前线程所剩余的时间片,让线程马上回到就绪队列而非等待队列
- 模拟时间片轮转的JavaScript实现
- 基于时间片的多任务实现
- linux 进程线程时间片
- wince 设置线程时间片
- Linux2.6内核进程调度系列3.更新普通进程的时间片
- KMP实现与失效函数的改进(C++)
- 一个js函数的改进(实现动画效果)
- 基于mykernel的时间片轮转调度的实现
- 单片机中基于时间片的多任务的实现
- 应用时间片实现多任务的单片机代码
- 基于mykernel实现的时间片轮转调度代码分析
- 单片机多任务的时间片方式实现
- Kafka笔记二之Topic操作,文件参数配置
- 2017河工大邀请赛G题_1266: 最大子段和_Dp
- 剑指offer-面试题35-第一个只出现一次的字符
- CodeForces
- 辗转相除法求最大公约数,最小公倍数。
- 普通接收函数的改进(时间片->线程实现)
- 6. ZigZag Conversion 题解
- LeetCode之路:104. Maximum Depth of Binary Tree
- 随笔之设计模式(一)
- 项目中用到的一些git命令(持续更新)
- Linux基础分区和格式化
- [Python爬虫]爬取东方财富网公司公告需要注意的几个问题
- Java8之lambda表达式
- sort命令