查看完整版本: [-- QT如何实现异步调用 --]

QTCN开发网 -> Qt基础编程 -> QT如何实现异步调用 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

brighteyes 2011-11-10 09:41

QT如何实现异步调用

请教:现在做一个与硬件通讯的项目,应用程序通过自定义的通讯协议与硬件通讯,一般情况下是通过SIGNAL/SLOT的方式实现数据的收发,下发一条指令,硬件返回数据后发出一个SIGNAL,通过SLOT处理接受的数据。
体现出来的效果是:在按钮事件中发出一条指令,对应一个SLOT进行数据的处理。随着指令种类的增加,SIGNAL/SLOT的种类也会越来越多。
事实上我希望的效果是:在按钮事件中发出一条指令并对收到的数据进行处理。我觉得这样处理符合实际情况,而且程序简洁。但问题是界面在等待数据返回的过程中会出现死掉的现象。因此我想请教一下QT里面能不能实现函数运行到一点,等待数据返回后继续执行,在等待的时间内函数是非阻塞的。
不知道我的描述是否清晰,还请会的人多指教。

wxj120bw 2011-11-10 10:42
我有些问题 硬件返回数据中不含有指令 对硬件返回数据处理slot函数连接那个信号signal

brighteyes 2011-11-10 15:38
已解决。设置一个定时器,一个时间段之内线程响应其他事件,这样不会造成线程阻塞,时间到继续执行函数。
            QElapsedTimer t;            t.start();            while(t.elapsed()<maxResponseTime)                QCoreApplication::processEvents();

brighteyes 2011-11-10 15:39
不好意思,对你的问题不太理解。我的问题也解决。不使用SIGNAL/SLOT的方式。

wxj120bw 2011-11-10 19:09
既然问题解决了 那我也没问题了

lwei24 2020-07-09 15:59
brighteyes:不好意思,对你的问题不太理解。我的问题也解决。不使用SIGNAL/SLOT的方式。 (2011-11-10 15:39) 

楼主,请问你当时是怎么解决的?方便分享一下方法吗?

levon 2020-07-09 18:24
brighteyes:已解决。设置一个定时器,一个时间段之内线程响应其他事件,这样不会造成线程阻塞,时间到继续执行函数。
            QElapsedTimer t;            t .. (2011-11-10 15:38) 

这方法是正确的;很常见的;
这个timer 通常也作为超时判断处理;


查看完整版本: [-- QT如何实现异步调用 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled