2010-09-01 5 views
1

У меня есть виджет, который измеряет прошедшее время, а затем через определенную продолжительность выполняет команду. Однако, если виджет оставлен, я хочу, чтобы я отменил этот вызов функции, а не выполнил команду.Есть ли способ написать команду, чтобы она прерывала вызов текущей функции?

Как это сделать?

ответ

3

Используйте модуль threading и запустите новый поток, который будет запускать функцию.

Просто прекратите функцию, это плохая идея, так как вы не знаете, прервите ли нить в критической ситуации. Вы должны расширить свою функцию следующим образом:

import threading 

class WidgetThread(threading.Thread): 
    def __init__(self): 
     threading.Thread.__init__(self) 
     self._stop = False 

    def run(self): 
     # ... do some time-intensive stuff that stops if self._stop ... 
     # 
     # Example: 
     # while not self._stop: 
     #  do_somthing() 

    def stop(self): 
     self._stop = True 



# Start the thread and make it run the function: 

thread = WidgetThread() 
thread.start() 

# If you want to abort it: 

thread.stop() 
0

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

Кроме того, с вашей конкретной проблемой вы можете ввести флаг и проверить это в команде.

0

Не знаю о потоках python, но, как правило, вы прерываете поток, это иметь какой-то объект состояния threadafe, который вы можете установить из виджета, и логику в коде потока, чтобы проверить изменение состояния значение объекта и выйти из цикла потока.