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


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

Обновлен: Ноябрь 2007

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

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

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

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

a35fbec4.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

Этот образец кода служит для демонстрации основных принципов и не предназначен для использования в приложениях или на веб-узлах, поскольку не может считаться примером наиболее безопасного кода. Корпорация Майкрософт не несет ответственности за случайные или косвенные убытки в случае использования образца кода не по назначению.

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

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

    Дополнительные сведения см. в разделе Поиск файлов примеров.

  • Самая последняя версия и полный список образцов доступны в Интернете на странице образцов Visual Studio 2008.

  • Кроме того, образцы находятся на жестком диске компьютера. По умолчанию образцы кода и файл Readme копируются в папку, находящуюся в папке \Program Files\Visual Studio 9.0\Samples\. Все образцы кода для экспресс-выпусков Visual Studio находятся в Интернете.

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

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

  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 в компиляторе

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