C++ XWindow不侦听自己的属性/窗口管理器

C++ XWindow不侦听自己的属性/窗口管理器,c++,x11,window-managers,motif,C++,X11,Window Managers,Motif,问题: 在Linux系统中,XWindows的窗口管理器C++文件中有一个java窗口。如果您连续(快速)打开HCI大约7-35次,通常至少有一次在默认位置(0,0)而不是我设置的位置(430300)打开窗口,那么在某个地方会出现错误。失败后,如果我关闭HCI并重新打开它,它将在正确的位置打开,就像在出现错误之前一样。属性最初是用xmoverseizewindow设置的 我添加了一个循环来检查HCI的位置(通过XTranslateAttributes和XGetWindowAttributes),

问题: 在Linux系统中,XWindows的窗口管理器C++文件中有一个java窗口。如果您连续(快速)打开HCI大约7-35次,通常至少有一次在默认位置(0,0)而不是我设置的位置(430300)打开窗口,那么在某个地方会出现错误。失败后,如果我关闭HCI并重新打开它,它将在正确的位置打开,就像在出现错误之前一样。属性最初是用xmoverseizewindow设置的

我添加了一个循环来检查HCI的位置(通过XTranslateAttributes和XGetWindowAttributes),并将X和Y与设置的位置进行比较,如果属性不匹配,则重置属性

但是,当我打印属性时,即使窗口实际在(0,0)处打开,它也会显示(430300)

具体问题: 这是XWindows的错误吗?属性读取一件事情是否有意义,但它与实际位置不匹配(即,这些属性可能是建议,而不是需求)?是否有其他方法可以返回更准确的HCI位置

更新
我已经尝试通过XMoveWindow将循环更改为仅连续移动位置15次。它似乎已经修复了它(尚未完成测试)。但肯定有比暴力更好的方法。

在试图改变窗口位置之前,您需要等待窗口实际实现,等等。尝试添加一个屏蔽子结构RedirectMask的事件处理程序,并在事件类型为XMapRequestEvent时在事件处理程序中调用XMOverseSizeWindow。

这确实是问题所在,谢谢!我的解决方案是一个0.02秒的睡眠功能,不过你的修复方法会更好。