Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Класс, предназначенный для использования в качестве базового класса для всех независимых агентов. Он используется для скрытия состояния от других агентов и взаимодействия посредством передачи сообщений.
Синтаксис
class agent;
Участники
Открытые конструкторы
| Имя | Описание |
|---|---|
| агент | Перегружен. Создает агент. |
| ~agent Деструктор | Уничтожает агента. |
Открытые методы
| Имя | Описание |
|---|---|
| cancel | Перемещает агент из состояния agent_created или состояния agent_runnable в состояние agent_canceled. |
| Начало | Перемещает агента из состояния agent_created в состояние agent_runnable, а затем планирует его выполнение. |
| состояние | Синхронный источник сведений о состоянии агента. |
| status_port | Асинхронный источник сведений о состоянии агента. |
| ждать | Ожидание завершения задачи агентом. |
| wait_for_all | Ожидает завершения задач всех указанных агентов. |
| wait_for_one | Ожидает завершения задачи любого из указанных агентов. |
Защищенные методы
| Имя | Описание |
|---|---|
| Договорились | Перемещает агент в состояние agent_done, указывающее, что агент завершил выполнение задачи. |
| запустить | Представляет основную задачу агента.
run следует переопределить в производном классе и указать, что должен делать агент после его запуска. |
Замечания
Дополнительные сведения см. в разделе "Асинхронные агенты".
Иерархия наследования
agent
Требования
Заголовок: agents.h
Пространство имен: конкурентность
агент
Создает агент.
agent();
agent(Scheduler& _PScheduler);
agent(ScheduleGroup& _PGroup);
Параметры
_PScheduler
Объект Scheduler , в котором запланирована задача выполнения агента.
_PGroup
Объект ScheduleGroup , в котором запланирована задача выполнения агента. Используемый объект Scheduler подразумевается группой расписаний.
Замечания
Среда выполнения использует планировщик по умолчанию, если вы не указали параметры _PScheduler или _PGroup .
~агент
Уничтожает агента.
virtual ~agent();
Замечания
Это ошибка уничтожить агента, который не находится в терминальном состоянии (agent_done или agent_canceled). Это можно избежать, если подождать, пока агент достигнет конечного состояния в деструкторе класса, который наследует от класса agent.
Отмена
Перемещает агент из состояния agent_created или состояния agent_runnable в состояние agent_canceled.
bool cancel();
Возвращаемое значение
true если агент был отменен, false в противном случае. Агент не может быть отменен, если он уже запущен или уже завершен.
выполнено
Перемещает агент в состояние agent_done, указывающее, что агент завершил выполнение задачи.
bool done();
Возвращаемое значение
true Значение, если агент перемещен в состояние agent_done, false в противном случае. Отмененного агента нельзя переместить в состояние agent_done.
Замечания
Этот метод должен вызываться в конце run метода, когда вы знаете, что выполнение агента завершено.
запускать
Представляет основную задачу агента.
run следует переопределить в производном классе и указать, что должен делать агент после его запуска.
virtual void run() = 0;
Замечания
Состояние агента изменяется на agent_started непосредственно перед вызовом этого метода. Метод должен вызвать done у агента с соответствующим статусом перед возвратом и не выбрасывать никаких исключений.
начало
Перемещает агента из состояния agent_created в состояние agent_runnable, а затем планирует его выполнение.
bool start();
Возвращаемое значение
true если агент успешно запущен, false в противном случае. Нельзя запустить агента, который был отменен.
статус
Синхронный источник сведений о состоянии агента.
agent_status status();
Возвращаемое значение
Возвращает текущее состояние агента. Обратите внимание, что возвращенное состояние может измениться немедленно после возврата.
статус_порта
Асинхронный источник сведений о состоянии агента.
ISource<agent_status>* status_port();
Возвращаемое значение
Возвращает источник сообщения, который может отправлять сообщения о текущем состоянии агента.
подождите
Ожидание завершения задачи агентом.
static agent_status __cdecl wait(
_Inout_ agent* _PAgent,
unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);
Параметры
_PAgent
Указатель на агент для ожидания.
_Тайм-аут
Максимальное время ожидания в миллисекундах.
Возвращаемое значение
Состояние agent_status агента после завершения ожидания. Это может быть agent_canceled или agent_done.
Замечания
Задача агента завершается, когда агент входит в состояние agent_canceled или agent_done.
Если параметр _Timeout имеет значение, отличное от константы COOPERATIVE_TIMEOUT_INFINITE, исключение operation_timed_out возникает, если истекает указанное время до завершения задачи агента.
wait_for_all
Ожидает завершения задач всех указанных агентов.
static void __cdecl wait_for_all(
size_t count,
_In_reads_(count) agent** _PAgents,
_Out_writes_opt_(count) agent_status* _PStatus = NULL,
unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);
Параметры
count
Количество указателей агента, присутствующих в массиве _PAgents.
_PAgents
Массив указателей на агентов для ожидания.
_PStatus
Указатель на массив состояний агента. Каждое значение состояния будет представлять состояние соответствующего агента при возврате метода.
_Тайм-аут
Максимальное время ожидания в миллисекундах.
Замечания
Задача агента завершается, когда агент входит в состояния agent_canceled или agent_done.
Если параметр _Timeout имеет значение, отличное от константы COOPERATIVE_TIMEOUT_INFINITE, исключение operation_timed_out возникает, если истекает указанное время до завершения задачи агента.
wait_for_one
Ожидает завершения задачи любого из указанных агентов.
static void __cdecl wait_for_one(
size_t count,
_In_reads_(count) agent** _PAgents,
agent_status& _Status,
size_t& _Index,
unsigned int _Timeout = COOPERATIVE_TIMEOUT_INFINITE);
Параметры
count
Количество указателей агента, присутствующих в массиве _PAgents.
_PAgents
Массив указателей на агентов, которых нужно ожидать.
_Статус
Ссылка на переменную, в которой будет помещено состояние агента.
_Index
Ссылка на переменную, в которой будет помещен индекс агента.
_Тайм-аут
Максимальное время ожидания в миллисекундах.
Замечания
Задача агента завершается, когда агент входит в состояние agent_canceled или agent_done.
Если параметр _Timeout имеет значение, отличное от константы COOPERATIVE_TIMEOUT_INFINITE, исключение operation_timed_out возникает, если истекает указанное время до завершения задачи агента.