Пишу c использованием PyQt (Qt 4.7.0, Python 2.6). Задача следующая: есть программа, выполняющая длительную операцию. Чтобы не блокировать интерфейс эту длительную операцию выношу в отдельный поток. Сейчас код обработки выглядит примерно так
class WorkThread( QThread ):
def __init__( self, inData, radius, rotate ):
QThread.__init__( self, QThread.currentThread() )
self.mutex = QMutex()
self.stopMe = 0
def run( self ):
self.mutex.lock()
self.stopMe = 0
self.mutex.unlock()
interrupted = False
for i in inData:
# что-то делаем
self.emit( SIGNAL( "updateProgress()" ) )
self.mutex.lock()
s = self.stopMe
self.mutex.unlock()
if s == 1:
interrupted = True
break
if not interrupted:
self.emit( SIGNAL( "processFinished()" ) )
else:
self.emit( SIGNAL( "processInterrupted()" ) )
def stop( self ):
self.mutex.lock()
self.stopMe = 1
self.mutex.unlock()
QThread.wait( self )
и вызывается в приложении так
self.myThread = WorkThread( myData, myRadius, False )
QObject.connect( self.workThread, SIGNAL( "updateProgress()" ), self.updateProgress )
QObject.connect( self.workThread, SIGNAL( "processFinished()" ), self.processFinished )
QObject.connect( self.workThread, SIGNAL( "processInterrupted()" ), self.processInterrupted )
self.workThread.start()
Все работает, но терзают смутные сомнения насколько это правильно. В частности
здесь написано, что такой подход не совсем правильный