冲洗事件到X11

时间:2015-06-27 11:03:36

标签: c linux xlib

我正在创建一个向X11发送alt选项卡的xlib应用程序 我希望尽快刷新这些事件以发送下一个键组合:

XTestFakeKeyEvent(dis, 64, True, 0);
XTestFakeKeyEvent(dis, 23, True, 0);
XTestFakeKeyEvent(dis, 23, False, 0);
XTestFakeKeyEvent(dis, 64, False, 0);
XFlush(dis);
sleep(1);
XTestFakeKeyEvent(dis, 65, True, 0);
XTestFakeKeyEvent(dis, 65, False, 0);
XFlush(dis);

我希望第一组按键在第二组之前工作,不幸的是,除非我让应用程序在两次刷新之间休眠1秒钟,否则不会发生这种情况 我也试过xsync但没有骰子

感谢

1 个答案:

答案 0 :(得分:0)

阅读manual page,与XSync进行比较:

  

XFlush函数刷新输出缓冲区。大多数客户端应用程序不需要使用此功能,因为调用XPendingXNextEventXWindowEvent时,会根据需要自动刷新输出缓冲区。服务器生成的事件可能会排入库的事件队列中。

,而

  

XSync函数刷新输出缓冲区,然后等待,直到X服务器接收并处理了所有请求。生成的任何错误都必须由错误处理程序处理。对于Xlib收到的每个协议错误,XSync调用客户端应用程序的错误处理例程(参见第11.8.2节)。服务器生成的任何事件都会排入库的事件队列。

您的应用需要等待(睡眠是多余的)。使用XSync