0

考虑以下调用流程:

函数 A 调用XCheckIfEvent ,在谓词参数中传递一个指向函数 B 的指针。函数 B 调用XGetWindowProperty

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

4

1 回答 1

0

从手册页:

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

从另一个手册页:

对XLockDisplay的嵌套调用正常工作

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

于 2013-05-08T20:39:18.600 回答