По существу, чтобы параллельная обработка выполнялась, у вас есть несколько решений
1- Отдельные процессы (т.е. программы), работающие независимо, которые общаются друг с другом через определенный протокол (например, сокеты)
2- Или вы можете запустить один процесс из нескольких потоков
3 - Построить внутреннюю очередь событий и обработать их одну за другой
Это общая картина.
Что касается конкретного ответа на ваш вопрос, вы сказали, что «материал в первом цикле будет постоянно происходить». Реальность такова, что вы никогда не хотите, чтобы это происходило постоянно, потому что все, что вам нужно, это использовать 100% ЦП, и больше ничего не будет сделано
Самое простое решение, вероятно, номер 3.
В моем основном цикле я реализовал поток, который проходит через очередь событий и устанавливает таймер для каждого события. Как только все таймеры отправлены, главный цикл переходит в режим сна.
Когда таймер истекает, другая функция затем запускает соответствующую функцию для события, которое вызвало этот таймер.
В вашем случае у вас есть два события. Один для отображения меню выбора (первый цикл), а второй для изменения myPotatoHead. Таймер, связанный с первым, я бы установил на 0,5 с, увеличивая его, сокращая использование ЦП, но замедляя скорость отклика, увеличивая его использование, увеличивая использование ЦП, для второго события я бы установил 20-секундный таймер.
Конечно, когда время таймера истечет, вы не сделаете while 1
, а просто пройдете тело цикла while
один раз (т.е. избавитесь от while).