Как написать программу wxRuby, которая будет просто рисовать текст и setPixel, не заходя в main_loop?
Я хочу написать программу, которая будет постоянно вычислять числа и рисовать на холсте окна, включая рисование текста и настройку пикселей. Таким образом, программа, вероятно, не может войти в цикл обработки событий (main_loop), потому что это остановит вычисление чисел.
Есть ли способ просто нарисовать элементы без цикла событий?
Или, должен ли быть создан поток, чтобы один поток выполнял вычисления, а другой обрабатывал цикл событий окна?
1 ответ
Общая стратегия для программ, основанных на событиях, которые должны выполнять длинные вычисления, является одной из следующих:
- разбейте вычисления на небольшие порции, которые занимают не более нескольких десятков миллисекунд, а затем запланируйте их выполнение один за другим, когда цикл событий простаивает. Помните: цикл обработки событий - это просто цикл, поэтому, если ваши длительные вычисления - просто огромный цикл сложного и быстрого кода, пусть цикл обработки событий будет вашим циклом.
- поместите длительный расчет в отдельный поток и попросите этот поток передать свои результаты основному потоку потокобезопасным способом
- поместите долгосрочные вычисления в отдельный процесс и отправьте обновления обратно в ваш основной процесс
Первый метод идеален, если вы можете им управлять. Мое личное предпочтение тогда идет к третьему методу. Следует избегать использования потоков IMO, если это вообще возможно, если только вы не занимаетесь программированием потоков (и даже тогда я обычно рекомендую отдельный процесс).