免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3189 | 回复: 0
打印 上一主题 下一主题

串口循环读并且显示在textview中的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-19 14:50 |只看该作者 |倒序浏览
我编写了一个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()有时可以解决一些问题,但无法解决循环问题。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP