#python #multithreading #tkinter #python-multithreading #pyserial
Вопрос:
Я работаю над проектом, в котором я должен считывать значения с последовательного порта и отображать их в графическом интерфейсе tkinter. Я использую модуль непрерывной потоковой передачи python. Я использую непрерывный поток для непрерывного чтения данных на последовательном порту через каждые 0,5 с, но теперь я хочу остановить этот непрерывный поток. Так как же мне это остановить ?
Это функция, которую я вызываю, когда нажимается кнопка проверки
def scan():
print("in scan")
btn1_state = var1.get()
print("Scan: %d"%btn1_state)
t1 = continuous_threading.PeriodicThread(0.5, readserial)
if(btn1_state == 1):
t1.start()
else:
print("entered else ")
t1.stop() #I am using stop() but the thread doesn't stop
Пожалуйста, Помогите
Ответ №1:
Проблема, скорее всего, в том, что вы используете функцию блокировки чтения в своей readserial
функции. Ему нужен тайм-аут. Я могу воспроизвести с помощью этого кода:
import time
import continuous_threading
time_list = []
def save_time():
while True:
time.sleep(1)
time_list.append(time.time())
th = continuous_threading.PeriodicThread(0.5, save_time)
th.start()
time.sleep(4)
th.join()
print(time_list)
Это никогда не закончится.
Изменено на основе примеров.
Поскольку continuous_threading ожидает, что цикл событий будет находиться под контролем, он никогда не доходит до события остановки.