串口循环读并且显示在textview中的问题
我编写了一个gtk串口循环接收发送程序(包含一个textview和一个接收按钮和关闭按钮),用于从另一台设备中接收数据并显示在textview中,然后再发送回那台设备。
在串口接收数据后,当接收到数据并显示到textview后,再发送,发送完后又返回接收。可是进行这样循环时,gtk窗口无法显示数据,数据只能在调试串口中显示。不知道如何实现?
int Recv_Data(gpointer data)
{
int ret,i;
int fp,nread,nwrite;
char buff[16]="";
char pbuff[16]="";
fp = open(IRDA_PORT,O_RDWR);//打开红外口
if(fp < 0){
perror("open port error!n");
}
ret = SetSerialPort(fp,9600,8,1,'N');/*设置红外口参数*/
if(ret != 0){
printf("init port error!n");
}
fd_set fds;
struct timeval timeout; /*设置超时*/
timeout.tv_sec = 0;
timeout.tv_usec = 10*1000; /* 100ms */
FD_ZERO (&fds); //每次循环都要清空集合,否则不能检测描述符变化
if(fp != -1){
FD_SET (fp, &fds); //添加描述符
}
ret=select (fp+1, &fds, NULL, NULL, &timeout);
while(1){
/***********读串口********************/
nread = read(fp, buff, RECV_MAX); /*RECV_MAX=5*/
if(nread > 0){
printf("read %d data to COM : n",nread);
append_text_buffer(textbuffer,buff);
append_text_buffer(textbuffer,"n");
//数据处理
int temp;
for(i = 0; i < RECV_MAX/2; i++){
temp = buff;
buff = buff[RECV_MAX-i-1];
buff[RECV_MAX-i-1] = temp;
}
nwrite=write(fp,buff,RECV_MAX); /*SEND_MAX=5*/
}
else
{
printf("waitint for data ...n");
}
}
return 0;
}
红色部分用于将数据显示到textview中,这样进行循环,无法显示接收到的数据,而且两个按钮也不能响应点击事件?哪位大侠知道怎么回事?请指教?gtk窗口一用循环或者sleep,就无法正常显示?用gkt_timeout_add()有时可以解决一些问题,但无法解决循环问题。。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论