XShm完成事件未设置显示文件描述符

时间:2018-12-11 10:03:57

标签: c++ c linux unix x11

我有一个事件循环,它定期在一组读取文件描述符上调用poll()并在准备好从中读取事件时调度事件。这些文件描述符之一是XConnectionNumber()返回的X连接文件描述符,当文件描述符准备好时将调用以下文件:

XEvent evt;

if (! XPending (display))
    return false;

XNextEvent (display, &evt);

// do something with evt

这一切都可以很好地用于接收显示事件。

我的应用程序中的重新绘制依赖于XShm扩展,它实际上调用XShmPutImage()来绘制一些像素,然后等待完成事件,直到再次绘制为止,方法是通过在窗口中检查evt.any.type == XShmGetEventBase (display)来找到完成事件。以上代码。

问题是XShm完成事件似乎没有将显示器的文件描述符设置为可以进行I / O的操作,因此,我仅在将其他事件发送到显示器并设置fd时才获得重绘事件例如鼠标移动,按键事件等。这导致应用程序仅在发生其他事件时才响应。

我误解了XShm完成事件是如何发送的吗?它不应该设置Display fd吗?

1 个答案:

答案 0 :(得分:0)

好的,我已经回答了我自己的问题。似乎我需要在POLLOUT结构上为显示文件描述符设置pollfd标志。以前,我只是在等待输入事件时才设置POLLIN,但是XShm完成事件会将fd设置为可以写入。