2014-05-23 56 views
0

我在尝试关闭应用程序时遇到问题。截至目前,我的应用程序目前产生并在while循环中运行线程(while True循环),而我的主线程初始化并在PyQT中运行UI。当用户界面关闭时,PyQT应用程序挂起

def main(): 

    group_size = 8 
    buffer_size = 4 
    app = QtGui.QApplication(sys.argv) 
    dgui = DirectGui(group_size, buffer_size) 
    engine = KCluster_Engine(group_size, buffer_size) 
    dgui.set_engine_ref(engine) 
    engine.assign_interface(dgui) 
    thread = Thread(target = engine.start) 
    thread.start() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 

当我闭上我的PyQt的应用程序的主窗口的出,这催生了壳的python脚本命令不能停止,即使有CTRL-C。

处理此行为的最佳方法是什么?当我关闭我的应用程序时,我也希望生成的线程停止,加入并退出此过程。我该怎么做呢?

+0

最可能是该线程卡住某处。把日志放在那里,看看发生了什么 –

+0

@AbhishekBansal我知道一个事实,它旋转了一阵子,而真正的循环。无论如何都要在退出应用程序后将其停止。 – jab

+0

当你关闭最后一个窗口时'app.exec _()'会返回吗? –

回答

1

根据Python标准库,你必须杀死你的线程两种方式:

  • 要么你让它后台。(thread.daemaon = True),它会在不恰当的清洁的可能性
  • 或者你杀在SO使用像Event的信令方法,你在适当的地方,你在测试线程

但我认为你应该看看这个旧的(但仍是现实的...)问题:Is there any way to kill a Thread in Python?

所有这些假设app.exec_()在您的主线程中正确返回。

1

如果您使线程守护进程退出应用程序后它将停止。 在开始之前放入thread.daemon = True(如果你在调用开始后执行,则会引发异常)。它应该适用于线程模块的线程。

相关问题