Russian Qt Forum

Qt => Общие вопросы => Тема начата: Sokoloff от Ноябрь 06, 2009, 14:19



Название: Пара общих вопросов про QThread.
Отправлено: Sokoloff от Ноябрь 06, 2009, 14:19
Хочется прояснить для себя пару вопросов про QThread
1) Имею класс вида
Код
Python
class myThread(QThread):
 def __init__(self, param):
   QThread.__init__(self)
   self._param = param
 
 def myFunc(self):
   "long operation used self._param"
 
 def run(self):
   self.myFunc()
 

В каком потоке будет запущена функция myFunc? C одной стороны она вызывается из run, с другой стороны, объект создавался в основном потоке.

2. Скажем есть такой класс - пускатель потоков
Код
Python
class myClass(QObject):
 def __init__(self):
   QObject.__init__(self)
   self.threadsCount = 0
 
 def startThread(self):
   thread = myThread()
   self.connect(thread, SIGNAL("finished()"), self.threadFinished)
   self.threadsCount += 1
   thread.start()
 
 def threadFinished(self):
   self.threadsCount -= 1
 

Надо защищать переменную threadsCount мютексами? Или т.к. сигналы в данном случае ассинхронные, то это не нужно?
 


Название: Re: Пара общих вопросов про QThread.
Отправлено: Igors от Ноябрь 06, 2009, 14:45
В каком потоке будет запущена функция myFunc? C одной стороны она вызывается из run, с другой стороны, объект создавался в основном потоке.
В созданной thread

Надо защищать переменную threadsCount мютексами? Или т.к. сигналы в данном случае ассинхронные, то это не нужно?
Нет, т.к. счетчик обновляется в одной и той же thread (там где запущен пускатель)


Название: Re: Пара общих вопросов про QThread.
Отправлено: Sokoloff от Ноябрь 06, 2009, 15:13
Спасибо!
Вы меня несказанно обрадовали :)