Я пишу EEPROMную программу, довольно запутанную, но вся ее суть сводится к тому, что она создает поток, который что-то там делает (неважно), а прога делает coroutine.resume(thread) до тех пор, пока не закончится. Выполнение потока долгое, поэтому в нем натыканы yieldы чтобы не было too long without yielding. К потоку претензий нет, но так как он выполняется долго, то и главная рутина, которая его запускает и ждет завершения тоже работает долго и в ней происходит TLWY, поэтому я после coroutine.resume(thread) (он крутится в цикле) поставил coroutine.yield(), чтобы главный поток компа уступил выполнение. Но и так тоже не сработало - управление ушло в coroutine.yield и не вернулось((. Т. е. coroutine.resume(thread) выполнился, часть дочернего потока выполнилась, управление было передано главному, он в свою очередь вызвал yield (уступил) и завис (ему никто обратно не уступил??). Как в таком случае избежать TLWY, если, судя по всему yield - не то, что нужно? Я знаю что некоторые из системных вызовов OC (i. e. component.invoke()) тоже уступают выполнение, но мне не нужно взаимодействовать с компонентами. Как быть? И почему yield зависает?
Я пишу EEPROMную программу, довольно запутанную, но вся ее суть сводится к тому, что она создает поток, который что-то там делает (неважно), а прога делает coroutine.resume(thread) до тех пор, пока не закончится. Выполнение потока долгое, поэтому в нем натыканы yieldы чтобы не было too long without yielding. К потоку претензий нет, но так как он выполняется долго, то и главная рутина, которая его запускает и ждет завершения тоже работает долго и в ней происходит TLWY, поэтому я после coroutine.resume(thread) (он крутится в цикле) поставил coroutine.yield(), чтобы главный поток компа уступил выполнение. Но и так тоже не сработало - управление ушло в coroutine.yield и не вернулось((. Т. е. coroutine.resume(thread) выполнился, часть дочернего потока выполнилась, управление было передано главному, он в свою очередь вызвал yield (уступил) и завис (ему никто обратно не уступил??). Как в таком случае избежать TLWY, если, судя по всему yield - не то, что нужно? Я знаю что некоторые из системных вызовов OC (i. e. component.invoke()) тоже уступают выполнение, но мне не нужно взаимодействовать с компонентами. Как быть? И почему yield зависает?
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах