2016-06-20 3 views
1

Есть такой метод запуска:Как выйти из QThread, если у меня есть бесконечный цикл внутри метода выполнения

def run(self): 
    while True: 
     new_value = self.client.read_holding_registers(self.reg_num, 1, unit=self.slave_id).registers[0] 
     if new_value != self.value: 
      self.value = new_value 
      self.data_changed.emit(
       {"id": "{0};{1};{2};{3}".format(self.host, self.port, self.slave_id, self.reg_num), 
       "value": self.value}) 
      self.usleep(100) 

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

ответ

0

Вы знакомы с тем, что такое daemon? Если вы хотите, чтобы ваш поток всегда запускался и выходил, когда ваше приложение останавливалось, вам нужно сделать его демоном.

+0

Спасибо за ответ. Я хочу контролировать запуск и остановку потока. Если я хочу создать aroung 100 из этих потоков для бесконечного запуска, какую технологию я использую? –

+0

, когда вы хотите остановить их и как? Вы хотите вручную выбрать и остановить 1 за раз? Я предложил подход демона, так как вы можете вызвать 100 из них в своей основной функции, а затем, когда вы закроете приложение, оно автоматически закроет все потоки демона. – limbo

+0

Я хочу остановить их с помощью кнопки интерфейса (запуск/останов). Да, я хочу выбрать и остановить 1 за раз. Но я думаю, что есть проблема с демонами, что я не могу испускать сигнал для передачи данных в интерфейс. Или может?) Как я знаю, вы можете сделать только сигнал в классе, который наследует QObject. Поэтому мне нужно создать класс, который наследует run.Daemon (из [link] (https://pypi.python.org/pypi/daemons)) и QObject? –

 Смежные вопросы

  • Нет связанных вопросов^_^