首页 文章

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

提问于
浏览
1

我有一个事件循环,它定期在一组读取文件描述符上调用 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完成事件的发送方式吗?它不应该设置显示fd?

1 回答

  • 0

    好的我已经回答了我自己的问题 . 看来我需要在 pollfd 结构上为显示文件描述符设置 POLLOUT 标志 . 之前我只是在设置 POLLIN ,因为我在等待输入事件,但XShm完成事件正在将fd设置为准备写入 .

相关问题