为什么XInitThreads激活的锁是非递归的?

时间:2013-05-08 11:11:42

标签: x11 xlib xcb

考虑以下呼叫流程:

函数A调用 XCheckIfEvent 将指针传递给谓词参数中的函数B.功能B调用 XGetWindowProperty

如果使用 XInitThreads 函数初始化XLib,则上述调用流程会在调用 XGetWindowProperty 时挂起。在我看来,调用 XInitThreads 时激活的锁不是递归的。如果是真的,为什么?有没有办法让它递归?或者是否正式禁止在传递给XLib函数的回调中调用XLib函数?

1 个答案:

答案 0 :(得分:0)

从手册页:

  

如果已为线程初始化Xlib,则使用调用谓词   显示被锁定以及谓词对任何调用的结果   除非调用者,否则不会定义锁定显示的Xlib函数   首先调用 XLockDisplay

从另一个手册页:

  

XLockDisplay 的嵌套调用正常工作

所以看起来谓词必须在完成后调用 XLockDisplay XUnlockDisplay