Структура IExecutionContext
Интерфейс для контекста выполнения, который может выполняться на данном виртуальном процессоре и к которому может применяться совместное переключение контекста.
Синтаксис
struct IExecutionContext;
Участники
Открытые методы
Имя | Описание |
---|---|
IExecutionContext::D ispatch | Метод, вызываемый при запуске прокси-сервера потока для выполнения определенного контекста выполнения. Это должна быть основная рабочая подпрограмма для планировщика. |
IExecutionContext::GetId | Возвращает уникальный идентификатор контекста выполнения. |
IExecutionContext::GetProxy | Возвращает интерфейс прокси-сервера потока, выполняющего этот контекст. |
IExecutionContext::GetScheduler | Возвращает интерфейс планировщику, к которому относится контекст выполнения. |
IExecutionContext::SetProxy | Связывает прокси-сервер потока с этим контекстом выполнения. Связанный прокси-сервер потока вызывает этот метод прямо перед началом выполнения метода контекста Dispatch . |
Замечания
Если вы реализуете пользовательский планировщик, который взаимодействует с диспетчером ресурсов среды выполнения параллелизма, необходимо реализовать IExecutionContext
интерфейс. Потоки, созданные Resource Manager, выполняют работу от имени планировщика, выполняя IExecutionContext::Dispatch
метод.
Иерархия наследования
IExecutionContext
Требования
Заголовок: concrtrm.h
Пространство имен: concurrency
Метод IExecutionContext::D ispatch
Метод, вызываемый при запуске прокси-сервера потока для выполнения определенного контекста выполнения. Это должна быть основная рабочая подпрограмма для планировщика.
virtual void Dispatch(_Inout_ DispatchState* pDispatchState) = 0;
Параметры
pDispatchState
Указатель на состояние, в котором выполняется отправка этого контекста выполнения. Дополнительные сведения о состоянии отправки см. в разделе DispatchState.
Метод IExecutionContext::GetId
Возвращает уникальный идентификатор контекста выполнения.
virtual unsigned int GetId() const = 0;
Возвращаемое значение
Уникальный целочисленный идентификатор.
Замечания
Для получения уникального идентификатора объекта, реализующего IExecutionContext
интерфейс, следует использовать методGetExecutionContextId
, прежде чем использовать интерфейс в качестве параметра для методов, предоставляемых 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
метод.
См. также
Пространство имен concurrency
Структура IScheduler
Структура IThreadProxy