我在这里关注本教程:http://www.sbin.org/doc/Xlib/chapt_16.html
以下是教程的图像:
这是我的代码:(它是在我调用XInitThreads
的另一个线程中 - 我知道使用线程而X是坏的,我知道我应该在主线程上,但只是想知道是否可能)< / p>
var ev = XEvent();
var rez_XMaskEvent = XMaskEvent(cachedXOpenDisplay(), ButtonPressMask | ButtonReleaseMask, ev.address());
console.log('rez_XMaskEvent:', rez_XMaskEvent);
console.log('ev:', ev);
ButtonPressMask
是4
ButtonReleaseMask
是8
所以XMaskEvent
正在阻止,但每当我按下鼠标按钮时它都没有捕获它。它不应该取消阻止并转到console.log
行吗?
我是否需要在此线程中以某种方式运行事件循环?
由于
答案 0 :(得分:1)
我不是100%肯定,但我觉得这可能是你的问题:
如果没有一些额外的预防措施,您可能无法通过JavaScript执行此操作。浏览器中的JavaScript是单线程的。这意味着你持有一个锁,没有其他JavaScript可以运行。你的问题是a)你正在使用线程和b)&#34;如果你请求的事件不在队列中,XMaskEvent会刷新输出缓冲区并阻塞,直到收到一个。&#34; (see the man page)
这意味着XMaskEvent
阻止,因为还没有按下按钮。而且您的浏览器无法再执行JavaScript了。如果队列中有一个触发某些JavaScript的事件,浏览器将锁定。