XSync - discard参数是什么意思?

5 x11

根据手册页,调用XSync(dpy, 1)会丢弃队列中的事件,但这究竟意味着什么?如果它们没有被丢弃,它们是否被发送两次(一次是通过XSync()呼叫,第二次是在队列正常清空时)?或者它就像一个垃圾收集器(事件会在以后被丢弃)?

小智 0

您似乎误解了两件事:X 请求和 X 事件,这是不一样的。简而言之:

X 请求:

...客户端应用程序通过此连接向 X 服务器发送请求。这些请求是由客户端应用程序中调用的 Xlib 函数发出的。...

X事件:

...许多Xlib函数导致X服务器生成事件,用户的键入或移动指针可以异步生成事件。X 服务器将事件返回给客户端...

欲了解更多信息,请检查- 它非常有帮助。

XSync 以这种方式调用:XSync(dpy, False)做两件事(根据您指出的手册):

XSync 函数刷新输出缓冲区,然后等待,直到 X 服务器接收并处理所有请求。

XSync 是这样调用的:XSync(dpy, True)执行上述两件事加上附加的一件事:丢弃(处理)队列中的所有事件。

如果传递 True,XSync() 将丢弃队列中的所有事件,包括调用 XSync() 之前队列中的事件。

例如(伪代码):

sendEvent2Xserver() //for example by pressing the key
endEvent2Xserver() //for example by mouse button press
XSendEvent() //sending chosen event to X server
XSync(dpy, True) // after this call, it's guaranteed that all the previous events were processed by the server
Run Code Online (Sandbox Code Playgroud)