Образец атрибутов AutoThread: демонстрация использования класса CAtlAutoThreadModule
Обновлен: Ноябрь 2007
В образце AutoThread демонстрируется использование CAtlAutoThreadModule. Сервер реализуется в файле Server.exe. Модуль EXE является производным от CAtlAutoThreadModule, а не CAtlModule.
Образец AutoThread представляет версию данного образца без поддержки атрибутов.
Примечание о безопасности. |
---|
Этот образец кода служит для демонстрации основных принципов и не предназначен для использования в приложениях или на веб-узлах, поскольку не может считаться примером наиболее безопасного кода. Корпорация Майкрософт не несет ответственности за случайные или косвенные убытки в случае использования образца кода не по назначению. |
Чтобы получить образцы и инструкции по их установке, выполните следующие действия.
В меню Справка среды Visual Studio выберите пункт Примеры.
Дополнительные сведения см. в разделе Поиск файлов примеров.
Самая последняя версия и полный список образцов доступны в Интернете на странице образцов Visual Studio 2008.
Кроме того, образцы находятся на жестком диске компьютера. По умолчанию образцы кода и файл Readme копируются в папку, находящуюся в папке \Program Files\Visual Studio 9.0\Samples\. Все образцы кода для экспресс-выпусков Visual Studio находятся в Интернете.
Построение и запуск этого образца
Откройте файл решения AutoThread.sln.
В меню Построение выберите команду Построить решение. Будут построены и зарегистрированы клиент и сервер.
Запустите два экземпляра тестового контейнера элементов управления ActiveX. Сведения о доступе к тестовому контейнеру см. в разделе Тестирование свойств и событий при помощи тестового контейнера.
Вставьте один из клиентских элементов управления (класс CAutoCtl) в каждый тестовый контейнер.
Щелкните один из элементов управления и заметьте, что до ответа сервера проходит одна секунда.
Измените положение и размер текстовых контейнеров так, чтобы оба они были видны одновременно.
Щелкните один из элементов управления, а затем быстро щелкните другой элемент управления. Заметьте, что ожидание для элементов управления завершается примерно в одно и то же время. (Если объекты CComAutoThreadModule не использовались, первый элемент управления завершит работу через одну секунду, но второй элемент управления не завершит работу, пока не пройдет одна секунда с момента завершения первого элемента управления. Второй вызов метода sleep не будет выполнен, пока не завершится первый вызов.) С помощью методов Delay(PropGet) и Delay(PropPut) можно изменить число миллисекунд, на которые приостанавливается работа сервера. Если правильно подобрать параметры, второй вызов метода sleep может завершиться раньше, чем первый.
Принцип работы образца
Интерфейс сервера содержит один метод: Sleep. Этот метод приостанавливает работу потока сервера на заданное время. Клиентская часть образца является элементом управления ActiveX, который вызывает метод sleep сервера, когда пользователь щелкает элемент управления. Клиент также обладает свойством Delay, которое представляет продолжительность времени, на которое приостанавливается работа потока сервера. В элементе управления выводится текст "Ready", когда он ожидает действий пользователя. Текст "Waiting" отображается, когда элемент управления ожидает, пока сервер возобновит работу.
Атрибуты
В этом образце используются следующие атрибуты:
AutoThread/AutoClient: coclass, dual, emitidl, helpstring, id, in, module, object, out, pointer_default, progid, propget, propput, registration_script, retval, threading, uuid, version, vi_progid
AutoThread/AutoServer: coclass, dual, emitidl, helpstring, id, module, object, pointer_default, progid, threading, uuid, version, vi_progid
Ключевые слова
В этом образце используются следующие ключевые слова:
AtlGetObjectSourceInterface; BEGIN_SINK_MAP; CoCreateInstance; DECLARE_CLASSFACTORY_SINGLETON; IDispEventSimpleImpl::DispEventAdvise; END_SINK_MAP; IConnectionPointContainerImpl; IConnectionPointImpl; IDispEventImpl; OLE2CT; SINK_ENTRY_EX; SysAllocString; USES_CONVERSION; VARIANT; VariantClear; VariantCopy
Примечание. |
---|
Некоторые образцы, включая данный, не модифицировались с учетом изменений в мастерах, библиотеках и компиляторе Visual C++, однако по-прежнему демонстрируют выполнение требуемой задачи. |