Класс agent
Класс, предназначенный для использования в качестве базового класса для всех независимых агентов. Он используется для скрытия состояния от других агентов и взаимодействия посредством передачи сообщений.
Синтаксис
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 | Представляет основную задачу агента. run следует переопределить в производном классе и указать, что должен делать агент после его запуска. |
Замечания
Дополнительные сведения см. в разделе "Асинхронные агенты".
Иерархия наследования
agent
Требования
Заголовок: agents.h
Пространство имен: concurrency
агент
Создает агент.
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
Представляет основную задачу агента. run
следует переопределить в производном классе и указать, что должен делать агент после его запуска.
virtual void run() = 0;
Замечания
Состояние агента изменяется agent_started
прямо перед вызовом этого метода. Метод должен вызывать done
агент с соответствующим состоянием перед возвратом и не вызывать никаких исключений.
start
Перемещает агент из agent_created
состояния в agent_runnable
состояние и планирует его выполнение.
bool start();
Возвращаемое значение
true
Значение , если агент запущен правильно, false
в противном случае. Не удается запустить агент, который был отменен.
статус
Синхронный источник сведений о состоянии агента.
agent_status status();
Возвращаемое значение
Возвращает текущее состояние агента. Обратите внимание, что это возвращаемое состояние может измениться сразу после возврата.
status_port
Асинхронный источник сведений о состоянии агента.
ISource<agent_status>* status_port();
Возвращаемое значение
Возвращает источник сообщения, который может отправлять сообщения о текущем состоянии агента.
wait
Ожидает завершения задачи агента.
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 возникает, если истекает указанное время до завершения задачи агента.