- Apache 由PHP或CGI去控掣串口操作
- linux c 下串口实验问题
- c专家编程中的问题请教
- linux串口发送,write函数返回成功后如何判断发送缓..
- 如何让程序支持telnet和串口连接?
- 有人遇到串口读写的问题吗?(已解决)
- 关于串口读取不到 数据的问题
- 串口接收问题,急!在线等!!
- 请问华硕A7V600-X能用什么样的串口硬盘呀?
- 请教:如何在SHELL中配置串口ttyS0的波特率等参数?..
- QT mingw 访问串口问题
- 用net-snmp编写应用程序中的问题!
- API 串口 OpenComm????
- 和ps2串口键盘对应的终端设备是什么?
- linux下串口编程接收数据buffer问题。(已解决)
- 主板6个串口,编译内核
- 请问如何访问本地终端串口?
- 求助:perl串口通信
- 串口连线也分SATA1和SATA2.5吗?
- 用perl如何接受串口信息
我编写了一个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内循环打印信息为什么等程序结束信息才一块出来? · 下一篇:如何在用xlib建立的窗口上显示文字?

