我正在使用PyQT(Qt版本:4.8.3,PyQt版本4.9.4)来创建大量页面的屏幕截图。我使用线程策略来提高性能。
它几秒钟(大约30秒)就像一个魅力,然后突然该应用程序只是用一个奇怪的“选择:无效的参数”消息来阻止我的终端。
这肯定不是我的调试信息之一。但是,这是非常随机的,我无法真正挖掘这里发生的原因。
如果这可以提供帮助,我生成的线程越多,发生得越快。这可能是一个记忆问题吗?
我不确定这是否有用,但这是我正在使用的产卵方法:
def spawn(self):
worker = Worker() # this is a QObject
thread = QThread()
# When done, respawn a new thread
self.connect(worker, SIGNAL("done()"), self.spawn)
# And stop the related thread
self.connect(worker, SIGNAL("done()"), thread.quit)
self.threadsPool.append(thread) # Keep-alive
self.workersPool.append(worker) # Keep-alive
worker.moveToThread(thread)
thread.start()
worker.start("myfancydomain.com")
谢谢你的帮助!
答案 0 :(得分:0)
它很可能与删除线程时对线程的访问有关。
我认为你的threadsPool试图在退出或删除自己之后访问你的线程。在某处,threadPool(或类似的容器)有一个槽或函数调用,它正在访问一个坏指针,例如一个已删除的线程。
要验证这是问题所在,请在另一个线程或循环中查询threadsPool中的线程数以及有关每个线程的一些信息。我打赌在第一个线程退出之后,当使用指向该线程的指针时它会崩溃。