Шаблон проектирования для многопоточного приложения с графическим интерфейсом - PullRequest
2 голосов
/ 13 ноября 2010

Я работаю над многопоточным GUI-приложением. Изменение графического интерфейса зависит от данных, поступающих из другого потока связи.

  1. поток связи устанавливает данные для графического интерфейса и флаги для изменения данных.

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

  3. Но он становится грязным из-за большого размера проекта.

Так что, если есть какой-то шаблон проектирования для такого рода проблем ...

Заранее спасибо ...

Ответы [ 2 ]

3 голосов
/ 13 ноября 2010

Я посетил лекцию Скотта Л. Бэйна, автора Emergent Design , где он описал использование шаблона Mediator для посредника между графическим интерфейсом и бизнес-логикой. В его примере они смогли обмениваться обычным графическим интерфейсом с (перефразируя из памяти) входными данными на естественном языке для людей с ограниченными возможностями, не меняя бизнес-логику. Нечто подобное может помочь вам синхронизировать данные, полученные из вашего потока, с вашим графическим интерфейсом, при этом разделив ответственность ваших классов.

2 голосов
/ 14 ноября 2010

Как насчет того, чтобы сделать его управляемым событиями? Уровень GUI подписывается на события из уровня данных или связи, и когда событие запускается, знает, чтобы обновить себя. Таким образом, уровень GUI знает о слое data / comms, но не наоборот.

Кстати, не уверен, что ваша среда, но нужно быть осторожным, обновляя GUI из потока, на котором запущено событие. Например, в .NET вам потребуется использовать Control.Invoke (http://msdn.microsoft.com/en-us/library/zyzhdc6b.aspx) для обновления графического интерфейса из потока, не являющегося графическим интерфейсом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...