Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 10, 2014 15:59:59

Corban_Dallas
Зарегистрирован: 2014-02-21
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

[pyqt] Уничтожение потока

Добрый день господа,
возникла проблема с уничтожением потока. Дело в том, что в моём случае, этот поток работает постоянно. При закрытии приложения, запускается и деструктор этого потока, но из-за того что метод run() ещё выполняется, вылетает ошибка:
QThread: Destroyed while thread is still running
Полагаю что тут, перед уничтожением потока, необходимо в выполнить terminate(), но кокой метод класса QThread переопределить, что бы добавить туда эту строчку не сообразить не могу.

Отредактировано Corban_Dallas (Июнь 10, 2014 16:04:09)

Офлайн

#2 Июнь 10, 2014 21:59:20

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2788
Репутация: +  185  -
Профиль   Отправить e-mail  

[pyqt] Уничтожение потока

> но кокой метод класса QThread переопределить, что бы добавить туда эту строчку не сообразить не могу.

Не надо его переопределять, его надо вызвать.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Июнь 11, 2014 17:09:07

Corban_Dallas
Зарегистрирован: 2014-02-21
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

[pyqt] Уничтожение потока

Rodegast
Не надо его переопределять, его надо вызвать.
да, вызвать перед уничтожением потока, но как это сделать? Пробовал вызывать при срабатывании события closeEvent,
class MyThread(QThread):
  ...
  def closeEvent(self, event):
      self.terminate()
      super(MyThread, self).closeEvent(event)
  ...
но как выяснилось при закрытии приложения, closeEvent не срабатывает, и соответственно self.terminate() не вызывается.

Отредактировано Corban_Dallas (Июнь 11, 2014 17:10:40)

Офлайн

#4 Июнь 11, 2014 21:45:18

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2788
Репутация: +  185  -
Профиль   Отправить e-mail  

[pyqt] Уничтожение потока

Как то так:

class potok(QtCore.QThread):
	def __init__(self, parent = None):
		QtCore.QThread.__init__(self, parent)
		# ЛЯЛЯЛЯ
	def run(self):
		# ЛЯЛЯЛЯ
class okno(QtGui.QMainWindow):
	def __init__(self):
		QtGui.QMainWindow.__init__(self)
		self.potok = potok(self)
		self.potok.start()
		# ЛЯЛЯЛЯ
	
	def closeEvent(self, event):
		self.potok.terminate()
		# ЛЯЛЯЛЯ



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Июнь 12, 2014 09:47:57

Corban_Dallas
Зарегистрирован: 2014-02-21
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

[pyqt] Уничтожение потока

Rodegast, способ конечно рабочий, благодарю. Но хочется найти способ как это реализовать внутри класса MyThread.

Отредактировано Corban_Dallas (Июнь 12, 2014 09:48:55)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version