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


Класс агент

Класс, предназначенный для использования в качестве базового класса для всех независимых агентов. Он используется для скрытия состояния от других агентов и взаимодействия посредством передачи сообщений.

Синтаксис

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 возникает, если истекает указанное время до завершения задачи агента.

См. также

Пространство имен параллелизм