Доброе время суток!
Сейчас пытаюсь реализовать многопоточный графический движек с использованием .NET. И хочу разобраться с различными аспектами его правильной реализации. Есть несколько вопросов:
- Допустимо ли в главном потоке проводить рендеринг, а во втором(фоновом) в момент рисования проводить обновление данных?
- Правильно ли использовать Thread для такого потока, с таким бесконечным циклом:
do { ...} while(canRunThread);
?
И внутри этого цикла использовать Task для асинхронной работы функции обновления?
- Как правильно обеспечивается взаимодействие потоков? Есть ли возможность использовать события или асинхронность?
- Будет ли ускорение рендеринга при использовании дополнительного буфера? Логика такова - в основном потоке крутится приложение, в фоновом потоке крутится рендерер, который рисует в условный буфер, битмап и т.д., а в остальных потоках физика, логика, и т.д. После того, как эти потоки обновления состояния завершили работу, они сохраняют результат в памяти и начинают по новой, поток-рендерер рисует этот результат в битмап, и когда закончит
- основной поток отрисовывает этот битмап-буфер на экране. Или достаточно обойтись просто хранением результата и рендерить при его обновлении?