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


Структура IExecutionContext

Интерфейс для контекста выполнения, который может выполняться на данном виртуальном процессоре и к которому может применяться совместное переключение контекста.

Синтаксис

struct IExecutionContext;

Участники

Открытые методы

Имя Описание
IExecutionContext::Dispatch Метод, вызываемый, когда прокси потока начинает выполнять определенный контекст выполнения. Это должен быть основной рабочий поток для вашего планировщика.
IExecutionContext::GetId Возвращает уникальный идентификатор контекста выполнения.
IExecutionContext::GetProxy Возвращает интерфейс прокси-сервера потока, выполняющего этот контекст.
IExecutionContext::GetScheduler Возвращает интерфейс планировщика, к которому принадлежит этот контекст выполнения.
IExecutionContext::SetProxy Связывает поток-прокси с этим контекстом выполнения. Связанный прокси-сервер потока вызывает этот метод прямо перед началом выполнения метода контекста Dispatch .

Замечания

Если вы реализуете пользовательский планировщик, который взаимодействует с диспетчером ресурсов Concurrency Runtime, необходимо реализовать интерфейс IExecutionContext. Потоки, созданные "Resource Manager", выполняют работу по заданию вашего планировщика, осуществляя метод IExecutionContext::Dispatch.

Иерархия наследования

IExecutionContext

Требования

Заголовок: concrtrm.h

Пространство имен: конкурентность

Метод IExecutionContext::Dispatch

Метод, вызываемый при запуске прокси-сервера потока для выполнения определенного контекста выполнения. Это должна быть основная рабочая подпрограмма для планировщика.

virtual void Dispatch(_Inout_ DispatchState* pDispatchState) = 0;

Параметры

pDispatchState
Указатель на состояние, в котором выполняется отправка этого контекста выполнения. Дополнительные сведения о состоянии отправки см. в разделе DispatchState.

Метод IExecutionContext::GetId

Возвращает уникальный идентификатор контекста выполнения.

virtual unsigned int GetId() const = 0;

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

Уникальный целочисленный идентификатор.

Замечания

Для получения уникального идентификатора объекта, реализующего GetExecutionContextId интерфейс, следует использовать методIExecutionContext, прежде чем использовать интерфейс в качестве параметра для методов, предоставляемых Resource Manager. Ожидается, что при вызове функции возвращается тот же идентификатор GetId .

Идентификатор, полученный из другого источника, может привести к неопределенному поведению.

Метод IExecutionContext::GetProxy

Возвращает интерфейс прокси-сервера потока, выполняющего этот контекст.

virtual IThreadProxy* GetProxy() = 0;

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

Интерфейс IThreadProxy. Если прокси-сервер потока выполнения не был инициализирован вызовом SetProxy, функция должна вернуть NULL.

Замечания

Resource Manager вызовет метод SetProxy в контексте выполнения, используя интерфейс IThreadProxy в качестве параметра, до входа в метод Dispatch в этом контексте. Ожидается, что вы будете хранить этот аргумент и возвращать его при вызовах GetProxy().

Метод IExecutionContext::GetScheduler

Возвращает интерфейс планировщика, к которому принадлежит этот контекст выполнения.

virtual IScheduler* GetScheduler() = 0;

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

Интерфейс IScheduler.

Замечания

Необходимо инициализировать контекст выполнения с допустимым IScheduler интерфейсом, прежде чем использовать его в качестве параметра для методов, предоставляемых Resource Manager.

Метод IExecutionContext::SetProxy

Связывает поток-прокси с этим контекстом выполнения. Связанный прокси-сервер потока вызывает этот метод прямо перед началом выполнения метода контекста Dispatch .

virtual void SetProxy(_Inout_ IThreadProxy* pThreadProxy) = 0;

Параметры

pThreadProxy
Интерфейс прокси-сервера потока, который требуется ввести Dispatch метод в этом контексте выполнения.

Замечания

Ожидается, что вы сохраните параметр pThreadProxy и вернете его при вызове GetProxy метода. Resource Manager гарантирует, что потоковый прокси, связанный с контекстом выполнения, не изменится, пока потоковый прокси выполняет метод Dispatch.

См. также

Пространство имен параллелизм
Структура IScheduler
Структура IThreadProxy