问题讨论:程序 C/C++ Java GUI编程 ASP Php Shell Perl Web开发 软件工程 三大件 机箱 存储设备 光存储 音频设备 视频设备 外设 购机
asp php java C CGI .net vb delphi unix&linux sql Word Excel WPS OutLook Powerpoint Dreamweaver FPage/Golive CSS/HTML DOM/JS
热门词:流程图 excel 入侵检测 vss Windows 安全漏洞 QQ空间 事件编程 MFC

 程序设计交流 > GUI编程 

串口循环读并且显示在textview中的问题

[2008-11-20 2:35:51] [来源: 百家电脑学院] [我要投稿]

2008-11-19 14:50wolfme串口循环读并且显示在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[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()有时可以解决一些问题,但无法解决循环问题。。。。

·串口循环读并且显示在textview中的问题 | 相关文章·

·百家学院 | 最新评论·