0

我已经使用 libtcod 库(包括 C# 和 python 包装器)进行了合理数量的编码。我当前的设置是 KUbuntu 14.10、python 2.7.8 和 libtcod 1.5.2。

我已经制作了一些运行良好的程序,但我刚刚开始的最新程序似乎不想让我关闭控制台窗口。

CTRL+C我可以从运行程序的控制台发送一个,它会关闭,但是,没有点击窗口的“x”按钮,或者Alt+F4,它会关闭,但是,没有多少点击窗口的“x”按钮,或者s 似乎工作。

我的代码如下:

'''
justclose.py
'''

import sys
import time
import libtcodpy as libtcod

libtcod.console_set_custom_font(b'lucida12x12_gs_tc.png', libtcod.FONT_TYPE_GREYSCALE | libtcod.FONT_LAYOUT_TCOD)
libtcod.console_init_root(50,50, "The ever-present window", False)
libtcod.console_flush()

while not libtcod.console_is_window_closed():
  time.sleep(1)

sys.exit

当我运行程序时,控制台会按预期出现,并等待console_is_window_closed 返回true,但它永远不会这样做。我不确定问题出在哪里。我可以运行其他程序,这些程序使用相同的初始化代码和相同的while循环,并且对我单击控制台窗口上的关闭按钮响应很好。

我试过浏览一下这个过程,但是,我不确定我是否能胜任破译它的任务。没有任何东西立刻显得异常。

我想要一些关于如何找出问题所在的建议。谢谢。

编辑:具体来说,我想知道如何检查关闭窗口事件是否正在传播,如果是,它会被困/忽略多远,诸如此类。当我通过 strace 运行时,当我单击关闭按钮时,我看不到任何事情发生。有没有更好的方法来调试这个?

4

1 回答 1

0

替换time.sleep(1)libtcod.console_check_for_keypress()。当程序每次迭代休眠 1 毫秒时,按 X 时程序无法响应。按时退出,CTRL+C因为程序收到 SIGINT 信号并立即退出。替换time.sleep(1)libtcod.console_check_for_keypress()使程序检查键盘上按下的键,如果有的话。这样,程序就不会阻止执行。

于 2015-06-22T14:57:11.670 回答