Класс 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 агент с соответствующим состоянием перед возвратом и не вызывать никаких исключений.

начало

Перемещает агент из agent_created состояния в agent_runnable состояние и планирует его выполнение.

bool start();

Возвращаемое значение

true Значение , если агент запущен правильно, false в противном случае. Не удается запустить агент, который был отменен.

status

Синхронный источник сведений о состоянии агента.

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

См. также

Пространство имен concurrency