考虑以下呼叫流程:
函数A调用 XCheckIfEvent 将指针传递给谓词参数中的函数B.功能B调用 XGetWindowProperty 。
如果使用 XInitThreads 函数初始化XLib,则上述调用流程会在调用 XGetWindowProperty 时挂起。在我看来,调用 XInitThreads 时激活的锁不是递归的。如果是真的,为什么?有没有办法让它递归?或者是否正式禁止在传递给XLib函数的回调中调用XLib函数?
答案 0 :(得分:0)
从手册页:
如果已为线程初始化Xlib,则使用调用谓词 显示被锁定以及谓词对任何调用的结果 除非调用者,否则不会定义锁定显示的Xlib函数 首先调用 XLockDisplay 。
从另一个手册页:
对 XLockDisplay 的嵌套调用正常工作
所以看起来谓词必须在完成后调用 XLockDisplay 和 XUnlockDisplay 。