2012-06-08 2 views
2

Есть ли причина, по которой весь рисунок UIKit или чертеж AppKit выполняется в основном потоке?Почему пользовательский интерфейс нарисован на основной теме?

+0

Возможный дубликат [Почему большинство пользовательских интерфейсов однопоточных?] (Http://stackoverflow.com/questions/5544447/why-are-most-ui-frameworks-single-threaded) –

ответ

2

«Поскольку многопоточный рисунок быстро становится слишком сложным/conf использование "- это только половина ответа.

Другим серьезным препятствием для многопоточного управления пользовательским интерфейсом является обработка событий. Смешивание обработки событий в параллельный чертеж, в частности. Вы должны каким-то образом смешивать рисунок с хаосом, который является обезьяной, избивающей экран/клавиатуру/мышь, эффективно поддерживая понятие целостности транзакций.

Уже сейчас это невозможно без параллелизма.

5

Это основная структура всех GUI рисунка должно быть сделано на одном потоке, Доступ к экрану для добавления элемента и рисунок не многопоточный процесс

Представьте себе случай, когда у вас есть 10 потоков, каждый из их пытается рисовать и или перемещать элементы на экране, что позволит создать ип детерминированных ошибок и проблем, которые были бы очень трудно обрабатывать и/или найти

Также читайте здесь Why are most UI frameworks single threaded?

+1

+1: простой ответ, который попадает в точку. Фактически вы могли управлять пользовательским интерфейсом из нескольких потоков, но все могло бы легко выйти из рук. –

+0

Вы можете реализовать рисунок графического интерфейса многопоточным способом, но я ожидаю, что к тому моменту, когда вы добавите блокировку, чтобы остановить два потока от попыток нарисовать одно и то же в одно и то же время или разные вещи в одном и том же месте одновременно, вы потеряют все преимущества за счет добавления блокировки накладных и неприятных неопределенных ошибок. – JeremyP

Смежные вопросы