QThreadを使用して定期的なバックグラウンド作業を行っています。ソースコードは次のようになります。
class Worker(QObject):
""" Separate QObject that does the work with affinity of
'DoStuffOnceASecond'"""
def __init__(self):
super(QWorker, self).__init__()
def doWork(self):
#... do work, post signal to consumer
class DoStuffOnceASecond(QThread):
def __init__(self):
super(DoStuffOnceASecond, self).__init__()
def run(self):
""" Setup "pullFiles" to be called once a second"""
self.timer= QTimer()
self.worker = Worker()
self.timer.setSingleShot(False)
self.timer.timeout.connect(self.worker.doWork)
self.timer.start(1000)
self.exec_()
私はそのようなスレッドを終了するための最良の方法を探しています。1つのオプションは、メインスレッドからこのスレッドにシグナルを送信し、このスレッドにスロットを作成することです。これらのスロットはイベントループの一部として実行されるため、安全に取得されます。しかし、それなら私は自己終了するでしょう...そしてそれが非常にうまくいくかどうかはわかりません。
または、スレッドがイベントループを実行していることを意識する必要があるので、このスレッドを呼び出すだけで安全かどうか疑問に思っていexit()
ますか?ドキュメント はこれが大丈夫であることを示しているようです:
この関数を呼び出した後、スレッドはイベントループを離れ、QEventLoop :: exec()の呼び出しから戻ります。QEventLoop :: exec()関数はreturnCodeを返します。
「イベントループを離れる」とは、現在のイベントの処理を終了できることを意味すると思います。または、QThreadは即座に終了しますか?
ここでのコードはpython(pyside 1.10、python 2.7)ですが、これはQThreadを使用するすべてのQTコードに簡単に適用できます。