我在带有触摸屏的基于ARM的linux嵌入式平台上使用Qt 4.8,在linux和Qt之间使用TSLIB。
数据链看起来像这样:
触摸屏驱动程序(内核) - > Linux输入事件驱动程序(内核) - >缓冲区(/ dev / input / touchscreen) - > TSLIB(用户空间) - > QWS(用户空间) - > UI(用户空间)
TSLIB由QWS服务器调用,它与UI的线程相同。 我遇到了一些问题,因为当UI线程进行长时间的操作时,linux输入驱动程序会一直填充缓冲区,没有人读取它,所以我有一些溢出。 当发生溢出时,linux驱动程序刷新整个缓冲区并松开缓冲区中的每个事件。 当我松开一个发布活动时,这是一个真正的问题,因为按钮可以保持"按下"即使用户不再按下它了。
我已经降低了触摸屏驱动程序初始化中的事件率并增加了缓冲区的大小,但由于UI可以冻结几秒钟,缓冲区中可能会有很多事件等待。
所以问题是,是否可以在与UI不同的线程中运行QWS服务器?这样,即使用户界面很忙,它也可以读取触摸屏事件。
我知道UI线程不应该进行长时间的操作,我试图尽可能地避免它,但是例如,如果我打开一个包含QFileSystemModel和QTreeView的1000个文件的文件夹,那么UI线程被冻结〜7s ......
无论如何,如果您在输入事件驱动程序中有一个更好的想法而不是一个可笑的大缓冲区,请告诉我!谢谢!