Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
考虑以下调用流程:
函数 A 调用XCheckIfEvent ,在谓词参数中传递一个指向函数 B 的指针。函数 B 调用XGetWindowProperty。
如果 XLib 使用XInitThreads函数初始化,则上述调用流程在调用XGetWindowProperty时挂起。在我看来,调用XInitThreads时激活的锁不是递归的。如果是真的,为什么?有没有办法让它递归?还是官方禁止从传递给 XLib 函数的回调中调用 XLib 函数?
从手册页:
如果已为线程初始化 Xlib,则调用谓词时锁定显示,除非调用者首先调用XLockDisplay ,否则不会定义谓词对锁定显示的任何 Xlib 函数的调用结果。
从另一个手册页:
对XLockDisplay的嵌套调用正常工作
所以看起来谓词必须调用XLockDisplay,并在完成后调用XUnlockDisplay。