我正在编写一个QT桌面应用程序,它将显示从串行端口收到的信息。因此,使用标准Windows API功能创建了一个类并将其打包到DLL中,以便与连接的设备(CreateFile,ReadFile,WriteFile,...)进行通信。
此时计时器以预定义的速率调用DLL [< 200ms]这导致gui短时间冻结。因此,我正在考虑使用线程来执行串口操作,这也将显示所有内容。
最好是使用线程来解决这个问题,还是应该重写类来完成工作事件?目标是,gui不会冻结。
编辑: 我使用QThread派生的worker类解决了这个问题,该类具有一个黯然失色的run()函数,该函数在后台处理串口通信并在新信息可用时更新gui。
答案 0 :(得分:1)
在许多用例中,在单独的线程上执行所有阻塞(同步)I / O是一种很好的做法,尤其是涉及图形用户界面时。 Here's a page I've referenced关于同步I / O的挑战(与异步相反,代码不会阻塞,但仍然是单线程的,或者是您正在讨论的并行)。问题不仅仅是你提出的问题,例如: