2013-05-08 44 views
0

考慮以下呼叫流程:爲什麼由XInitThreads非遞歸激活該鎖?

函數A調用XCheckIfEvent傳遞指針在謂詞參數函數B。函數B調用XGetWindowProperty

如果XLIB與XInitThreads初始化功能,上述呼叫流掛在調用XGetWindowProperty。在我看來,調用XInitThreads時激活的鎖不是遞歸的。如果屬實,爲什麼?有沒有辦法讓它遞歸?還是禁止在傳遞給XLib函數的回調函數中調用XLib函數?

回答

0

從手冊頁:

如果Xlib中已經線程初始化,調用它時, 用於鎖定顯示器的顯示鎖定和謂詞任何 的Xlib函數調用的結果沒有被定義,除非呼叫者 首先呼叫XLockDisplay

從另一名男子頁:

嵌套調用XLockDisplay正常工作

如此看來,謂語必須調用XLockDisplayXUnlockDisplay時,它的完成。