在Qt中如何让主界面实时响应子线程发来的数据
我在设计一个Ftp客户端,开了一个线程,在run函数里面创建QFtp对象,大概是这个样子
MyThread::run()
{
QFtp ftp = new QFtp();
setupConnect();----------------->这个函数用来建立ftp和主界面的连接
while(isRuning==true)
{
app.ProcessEvents();
this->usleep(100);
}
}
我发现这种做法响应很慢,比如当Ftp收到数据时会调用emit slot_updateToGUI("数据内容")发信号给界面,
通知界面打印数据,实际上界面不会立刻收到这个信号,而是等主线程拿到控制权后才刷新界面,这样一来界面就不能实时反映Ftp收到的数据了,而是等到主线程拿到控制权后,一次性打印出一大堆buffer着的数据。
关于在线程中那个while(isRuning==true),我觉得也不是很好,毕竟隔不到100毫秒就判断一次,非常浪费cpu的资源,但是不判断又不行,要即时响应退出的信号,就是说我在其他地方将isRuning=false,线程就立刻退出循环
请问各位大侠有什么好办法,可以让主线程实时响应次线程发出来的数据吗?