Поделиться через


Образец FREETHRD: многопоточный клиент и свободнопоточный сервер с поддержкой COM в компиляторе

В этом образце демонстрируются многопоточный клиент и свободнопоточный сервер с поддержкой COM в компиляторе.

Образец состоит из следующих частей:

  • Freclien — многопоточный клиент

  • Freserve — свободнопоточный внутрипроцессный сервер

Примечание о безопасностиПримечание по безопасности

Этот пример кода иллюстрирует концепцию и содержит только код, относящийся к этой концепции. Он может не отвечать требованиям безопасности для конкретных условий, и его не следует использовать в точности в том виде, в каком он приведен. Чтобы проект был безопасным и надежным, рекомендуется добавить код обеспечения безопасности и код обработки ошибок. Корпорация Майкрософт предоставляет этот пример кода на условиях "КАК ЕСТЬ", без каких-либо гарантий.

Чтобы получить образцы и инструкции по их установке, выполните следующие действия.

Доступ к примерам из Visual Studio

  • В меню Справка выберите пункт Примеры.

    По умолчанию эти примеры устанавливаются в папку диск:\Program Files\Microsoft Visual Studio 10.0\Samples\.

  • Самая последняя версия этого примера и полный список примеров представлены на странице Visual Studio Samples на веб-сайте MSDN.

Построение и запуск образца

Построение и запуск этого образца

  1. Откройте решение freethrd.sln.

  2. Постройте проект сервера, а затем проект клиента.

  3. Настройте проект клиента как запускаемый автоматически (щелкните узел проекта правой кнопкой мыши и выберите Назначить запускаемым проектом) и запустите образец.

Принцип работы образца

Образец Freclien порождает несколько потоков для создания и использования COM-объекта COBall, предоставляемого свободнопоточным сервером Freserve. Сам объект COBall не порождает потоки; он пассивно реагирует на запросы интерфейса IBall, поступающие из всевозможных потоков клиента. Клиент Freclien создает и контролирует один объект COBall через интерфейс IBall, предоставляемый объектом. В то время как три потока Freclien перемещают шарик с помощью вызовов IBall::Move, другой, основной поток, используя системный таймер, получает регулярные обновления позиции, размера и цвета объекта COBall. Эти данные, полученные с помощью вызова IBall::GetBall, используются в основном потоке для вывода графических изображений — снимков шарика в главном окне клиента.

В образце Freserve объект COBall обновляет внутренними средствами свое свойство цвета в зависимости от последнего потока, вызвавшего метод Move для объекта. Эти данные используются потоком отображения для каждого выводимого им изображения шарика. По мере перемещения шарика его цвет меняется в зависимости от потока, перемещающего шарик. Движущийся шарик оставляет за собой след, дающий наглядное представление об истории его обработки в потоках. Этот след показывает, что в модели COM со свободными потоками все потоки, выполняющие запросы через интерфейс к одному и тому же объекту, получают доступ к объекту в вызывающем потоке. Разные цвета одного объекта шарика представляют разные вызывающие потоки.

В данном образце используется собственная поддержка COM в компиляторе. Образец предлагает пример пользовательского COM-интерфейса, выполняющего маршалинг структур RECT и POINT в модели со свободными потоками. Он демонстрирует использование атрибута exclude директивы #import.

См. также

Ссылки

Compiler COM Support

Другие ресурсы

Образцы поддержки модели COM в компиляторе

Общие образцы