【问题标题】:Why is the lock activated by XInitThreads non-recursive?为什么 XInitThreads 非递归激活的锁?
【发布时间】:2013-05-08 11:11:41
【问题描述】:

考虑以下调用流程:

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

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

【问题讨论】:

    标签: x11 xlib xcb


    【解决方案1】:

    来自手册页:

    如果 Xlib 已为线程初始化,则调用谓词 显示被锁定并且谓词调用任何结果 除非调用者,否则未定义锁定显示的 Xlib 函数 首先调用了XLockDisplay

    从另一个手册页:

    XLockDisplay 的嵌套调用工作正常

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-16
      • 2013-11-10
      • 2018-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 2014-12-19
      相关资源
      最近更新 更多