在我的PyQt5
程序中,我想启动一个运行一些代码的新线程:
class SlamThread(QThread):
"""docstring for SlamThread"""
def __init__(self, parent):
QThread.__init__(self, parent)
def setSlam(self, params):
self.params = params
def run(self):
self.slam = Slam()
self.slam.setParams(self.params)
self.slam.start()
<^ >其中^ {< CD2>}是用C++编写的,用PybDun11转换。你知道吗在我的主程序中,代码由qAction
按钮触发:
def startSlam(self, ...):
params = ...
self.thread = SlamThread(self)
self.thread.setSlam(params)
self.thread.start()
for i in range(10):
print('done')
奇怪的是,它确实启动了一个新线程,done
在我的Slam
程序之前被打印出来。但是,当Slam
启动时,整个程序将挂起,直到Slam
完成。你知道吗
在我的C++ ^ {CD2>}代码中,就好像这个
int Slam::start()
{
init();
...
startSlam();
return 0;
}
运行startSlam
需要几分钟。你知道吗
根据docs,当对象在线程中执行时,必须调用gil\u scoped\u release和gil\u scoped\u acquire:
或在装订中:
您可以找到完整的测试here
相关问题 更多 >
编程相关推荐