• 5596阅读
  • 4回复

在lineedit中显示时间,该如何刷新? [复制链接]

上一主题 下一主题
离线gbzh
 

只看楼主 倒序阅读 楼主  发表于: 2008-05-18
— 本帖被 XChinux 执行加亮操作(2008-05-19) —
    从串口得到GPS数据,其中包含时间信息。现在用两个线程,一个线程是用来读取数据,另一个是处理并显示,显示的时候调用一个show_time()函数,要在lineEdit中显示时间。两个线程间通过一个标志位来切换。程序编译好之后要放到arm实验箱上运行。现在程序运行后可以得到数据,但是数据并不会刷新,也就是lineEdit中显示的时间数据一直停留在我开始运行程序的那个时刻。
    尝试通过定时器,定时调用主函数,但是好像会不停的创建线程。。。。而且用定时器显示的也并不稳定,有的时候可以每秒刷新,有的时候刷新一次就过了两三秒。
请问有什么办法可以解决这个问题吗? 本人菜鸟一个,请指教。。尽量详细点! THANK YOU!
离线lzian
只看该作者 1楼 发表于: 2008-05-19
你用的是多线程,线程内部的函数想要控制主窗口的话,可以发送一个signal,主窗口中自定义slot接受。
你要考虑下你的程序的整个结构。
读数据可以和显示放在同一个线程内。
离线gbzh

只看该作者 2楼 发表于: 2008-05-19
我也觉得可以放在同一个线程内。但是要等它读完之后才去调用另一个线程,所以就不知道该怎么改。
读函数里用这个
char c; int i; char buf[1024];
while(!GET_GPS_OK)
{ read (fd,&c,1);
  buf[i++]=c;
if(c=='\n'){ strncpy(GPS_BUF,buf , i )
                  i=0;
                  GET_GPS_OK=TRUE;
  }
}
之后处理和显示的线程就是通过GET_GPS_OK来调用相关的处理和显示函数。
if(GET_GPS_OK)
{ ..............
.............
}
线程内部的函数调用主窗口,我在主窗口中调用参数传递过来。比如 定义了线程a,在主函数中写入a.le=lineEdit1就可以传递过来。

怎样才可以保证它是读完之后才去调用第二个线程来处理和显示?
离线gbzh

只看该作者 3楼 发表于: 2008-05-19
现在用将读数据和显示的放在一个线程里面,也可以了。但是还是同样的问题,显示的时间不能刷新。有什么好办法吗?
离线lzian
只看该作者 4楼 发表于: 2008-05-19
线程定义一个signal,发送时间数据给主程序,主窗口定义slot,接受时间。
每次数据更新后emit  sendTime(time);
主程序中slot--getTime(time);
connect(&thread, SIGNAL(sendTime(time)), this,SLOT(getTime(time)));
快速回复
限100 字节
 
上一个 下一个