我有一个程序,其中包含一个使用Expose
生成XSendEvent
个消息的线程。第二个线程接收Expose
消息以及其他消息(主要是输入处理)。问题是发送线程以恒定速率(~60Hz)发送Expose
消息,但接收线程可能渲染速度慢于此。 X11队列会因额外的Expose
消息而陷入困境,任何输入处理消息都会落后于所有额外的Expose
消息。
在Windows中,这不是问题,因为Windows会自动将所有WM_PAINT消息合并为一条消息。有没有办法在X11中执行此操作,或以其他方式解决此问题?
答案 0 :(得分:3)
您可以与XCheckTypedEvent()
和朋友一起轻松地合并任何类型的活动。
答案 1 :(得分:1)
我能够解决这个问题如下:
使用XPeekEvent
阻止渲染线程。
当一个事件进入时,使用XPending
和XNextEvent
的组合将所有事件读入新的队列数据结构,但只复制第一个公开消息。
然后在新队列数据结构上运行事件处理循环。
这解决了我的问题,但我认为使用XCheckTypedEvent
(每个应用程序的答案here)的解决方案可能更优雅。
答案 2 :(得分:0)
你可以做的一件事: