Почему этот поток приостанавливается, когда «getstr» используется в другом потоке? Python Проклятия - PullRequest
1 голос
/ 01 мая 2020

Я создал поток, который должен показывать проходящие секунды. К сожалению, когда я использую getstr из модуля curses, весь скрипт останавливается, включая поток. Я должен использовать блокировку потока, чтобы остановить печать случайных символов из-за перекрывающихся порядков.

Любые предложения о том, как исправить это или альтернативу, были бы хорошими!

В приведенном ниже примере window и window2 уже настроены ...

lock = threaing.Lock()


def main_function():
  #starts thread
  t1 = threading.Thread(target=time_calc,args=(window2,))
  t1.start()
  #Gets user input
  while True:
    data = window1.addstr(y,x,"Type something in!")
    data = window1.getstr(y,x,5)

    lock.acquire()
    window1.erase()
    txt = "You said: "+data

    window1.addstr(y,x,txt)
    lock.release()


def time_calc(window2):
  current_count = 0

  while True:

    time += 1

    text = "Time Count: "+str(time)

    lock.acquire()
    window2.erase()

    window2.addstr(y,x,text)
    lock.release()

    time.sleep(1)

1 Ответ

0 голосов
/ 04 мая 2020

Проблема с моим кодом

Я выяснил проблему с моим кодом. Вы не можете запустить поток внутри потока по какой-то причине, и у меня изначально была вызвана моя функция main, которая считается потоком. Я думаю, что я должен был заявить об этом в моем вопросе. Извините

Возможно, есть способ запустить поток в потоке, но у меня это не сработало.

Мой обновленный код

lock = threading.Lock()

def call_threads():
  t1 = threading.Thread(target=main_function,args=(window1,))
  t1.start()

  t2 = threading.Thread(target=time_calc,args=(window2,))
  t1.start()

def main_function(window1):
  #Gets user input
  while True:
    data = window1.addstr(y,x,"Type something in!")
    data = window1.getstr(y,x,5)

    lock.acquire()
    window1.erase()
    txt = "You said: "+data

    window1.addstr(y,x,txt)
    lock.release()


def time_calc(window2):
  current_count = 0

  while True:

    time += 1

    text = "Time Count: "+str(time)

    lock.acquire()
    window2.erase()

    window2.addstr(y,x,text)
    lock.release()

    time.sleep(1)

Если есть что-то еще, что могло вызвать эту ошибку, пожалуйста, прокомментируйте ее!

...