Класс Cntm::AsyncProcHandle
[Cntm.AsyncProc]

Граф наследования:Cntm::AsyncProcHandle:

Cntm::ExecutionUnitHandle Cntm::BasicAsyncProc Cntm::AsyncProcResult< ResT > Cntm::AsyncProcResult< void >

Полный список членов класса


Подробное описание

Хэндл асинхронной процедуры.

Наследует класс хэндла единицы выполнения Cntm::ExecutionUnitHandle. Используется для управления асинхронной процедурой.

С одной процедурой может быть связано несколько хэндлов. Класс хэндла поддерживает операции копирования.

Через хэндл обеспечивается получение информации о состоянии выполнения асинхронной процедуры, запуск отсроченной процедуры, ожидание завершения процедуры и установка обработчика завершения.

Данный класс обеспечивает многопоточность.

Автор:
Овсеевич Р.

См. определение в файле AsyncProcHandleDef.h строка 41


Открытые члены

 AsyncProcHandle ()
 Конструктор по умолчанию.
ProcType Type () const
 Тип асинхронной процедуры: потоковая, отложенная, прямая (см.
bool Started () const
 Возвращает значение флага "была ли запущена процедура".
bool Finished () const
 Возвращает значение флага "завершилась ли процедура".
bool Success () const
 Вовзращает флаг успешности завершения асинхронного метода.
void Start ()
 Произвести запуск отсроченной асинхронной процедуры.
bool Wait (uint MSecTimeout=tmInfinite)
 Ожидать завершения выполнения асинхронной процедуры.
AsyncProcHandleSetFinishProc (const AsyncProcHandle &FinishProc)
 Установить обработчик завершения.
template<typename ClassT, typename MethodT>
AsyncProcHandleBindFinishToThreadProc (ClassT Object, MethodT Method, ThreadPriority Priority=tpNormal, bool HoldRef=true)
 Метод аналогичен методу SetFinishProc.
template<typename ClassT, typename MethodT>
AsyncProcHandleBindFinishToDeferProc (ClassT Object, MethodT Method, SynchroSpace::Ptr Space=SynchroSpace::Ptr(), bool HoldRef=true)
 Метод аналогичен методу SetFinishProc.
template<typename ClassT, typename MethodT>
AsyncProcHandleBindFinishToDirectProc (ClassT Object, MethodT Method, bool HoldRef=true)
 Метод аналогичен методу SetFinishProc.
void SetHoldRef (bool HoldRef)
 Изменить значение параметра HoldRef, указанного при создании асинхронной процедуры.

Защищенные типы

typedef RefPtr
< SpecUtils::AsyncProcImpl > 
AsyncProcImplPtr

Защищенные члены

 AsyncProcHandle (const AsyncProcImplPtr &Proc)
 Конструктор инициализации.
AsyncProcImplPtr Proc () const
 Метод приведения к ссылочному указателю на объект асинхронной процедуры.

Определения типов

typedef RefPtr<SpecUtils::AsyncProcImpl> Cntm::AsyncProcHandle::AsyncProcImplPtr [protected]

См. определение в файле AsyncProcHandleDef.h строка 170


Конструктор(ы)

Cntm::AsyncProcHandle::AsyncProcHandle (  )  [inline]

Конструктор по умолчанию.

Создает хэндл, не связанный с асинхронной процедурой.

См. определение в файле AsyncProcHandleDef.h строка 48

Cntm::AsyncProcHandle::AsyncProcHandle ( const AsyncProcImplPtr Proc  )  [protected]

Конструктор инициализации.

См. определение в файле AsyncProcHandle.cpp строка 67


Методы

Cntm::BasicAsyncProc::ProcType Cntm::AsyncProcHandle::Type (  )  const

Тип асинхронной процедуры: потоковая, отложенная, прямая (см.

перечисление Cntm::BasicAsyncProc::ProcType).

См. определение в файле AsyncProcHandle.cpp строка 17

Перекрестные ссылки Proc().

bool Cntm::AsyncProcHandle::Started (  )  const

Возвращает значение флага "была ли запущена процедура".

Для обычных процедур сразу после создания устанавливается в true, для отсроченных (Suspend...) - после их успешного запуска методом Start().

См. определение в файле AsyncProcHandle.cpp строка 24

Перекрестные ссылки Proc().

bool Cntm::AsyncProcHandle::Finished (  )  const

Возвращает значение флага "завершилась ли процедура".

Исходное значение - false. После выхода из асинхронного метода, указанного при создании устанавливается в true.

См. определение в файле AsyncProcHandle.cpp строка 30

Перекрестные ссылки Proc().

bool Cntm::AsyncProcHandle::Success (  )  const

Вовзращает флаг успешности завершения асинхронного метода.

Если при выполнении асинхронного метода в нем было сгенерировано необработанное исключение, т.е. произошел выход из метода без возврата результата, то флаг содержит false, если произошел нормальный выход из метода оператором return или при достижении конца метода, то данный флаг содержит true. До завершения метода данный флаг содержит false.

См. определение в файле AsyncProcHandle.cpp строка 36

Перекрестные ссылки Proc().

void Cntm::AsyncProcHandle::Start (  ) 

Произвести запуск отсроченной асинхронной процедуры.

Если запуск уже произведен, то ни каких действий не выполняется.

Для каждого из типов асинхронных процедур свой метод запуска. Для потоковых - создается новый поток, в котором происходит выполнение указанного асинхронного метода. Для отложенных - производится подготовка синхронизированного вызова указанного метода в указанном синхропространстве. Для прямых - непосредственный вызов указанного метода в методе Start(). Замечание: при прямом вызове все исключения, произошедшие в указанном при создании методе, будут проигнорированы.

Исключение: SystemException - системная ошибка при создании нового потока (только для потоковых процедур).

См. определение в файле AsyncProcHandle.cpp строка 42

Перекрестные ссылки Proc().

bool Cntm::AsyncProcHandle::Wait ( uint  MSecTimeout = tmInfinite  ) 

Ожидать завершения выполнения асинхронной процедуры.

Ожидание может длиться либо бесконечно до завершения, либо указанный интервал времени. В последнем случае возвращается результат ожидания: true - процедура завершилась, false - нет.

Предупреждение. Использование ожидания внутри синхропространства д.б. предельно аккуратным, т.к. если, например, начато ожидание внутри синхропространства, а асинхронный метод тоже захочет войти в это же синхропространство, то произойдет взаимоблокировка, приводящая к зависанию.

Исключение: SystemException - в случае системной ошибки при ожидании.

Аргументы:
MSecTimeout - интервал ожидания завершения асинхронной процедуры в мс. Если значение не указано,то ожидание будет длится до завершения процедуры.

См. определение в файле AsyncProcHandle.cpp строка 48

Перекрестные ссылки Proc().

Cntm::AsyncProcHandle & Cntm::AsyncProcHandle::SetFinishProc ( const AsyncProcHandle FinishProc  ) 

Установить обработчик завершения.

Обработчик завершения это другая отсроченная асинхронная процедура.

Если обработчик был установлен до завершения асинхронной процедуры, то его запуск (методом Start()) будет произведен непосредственно после выхода из асинхронного метода. Если он был установлен позже, то его запуск будет произведен непосредственно из данного метода.

У асинхронной процедуры м.б. множество обработчиков завершения, повторные вызовы данного метода не влияют на уже установленные обработчики.

Для удобства использования возвращается этот же объект (*this).

Исключения: BadArgException - если обработчик завершения находится в запущенном состоянии. SystemException - системная ошибка при создании нового потока (только для потоковых процедур).

Аргументы:
FinishProc - обработчик завершения. Является асинхронной процедурой которая не должна находиться в запущенном состоянии.

См. определение в файле AsyncProcHandle.cpp строка 54

Перекрестные ссылки Proc().

template<typename ClassT, typename MethodT>
Cntm::AsyncProcHandle & Cntm::AsyncProcHandle::BindFinishToThreadProc ( ClassT  Object,
MethodT  Method,
ThreadPriority  Priority = tpNormal,
bool  HoldRef = true 
) [inline]

Метод аналогичен методу SetFinishProc.

Данный метод принимает объект и метод и формирует отсроченную потоковую процедуру на основе указанных данных. В качестве аргумента указывается данный объект, что позволяет обработчику завершения получить результат выполнения.

Сигнатура метода Method должна иметь вид: "void(const AsyncProcHandle& res)".

Для удобства использования возвращается этот же объект.

См. Cntm::AsyncProc::SuspendThread.

Аргументы:
Object - объект-обработчик. Задается обычным указателем.
Method - метод объекта Object, который будет вызван синхронизированно в указанном синхропространстве.
Priority - приоритет потока, опционально, значение по умолчанию - tpNormal (см. перечисление Cntm::BasicAsyncProc::ThreadPriority).
HoldRef - хранить ли ссылку на объект Object, если это ссылочный объект. Параметр опциональный, значение по умолчанию - true.

Переопределяется в Cntm::AsyncProcResult< ResT > и Cntm::AsyncProcResult< void >.

См. определение в файле AsyncProcHandleImpl.h строка 20

Перекрестные ссылки SetFinishProc() и Cntm::AsyncProc::SuspendThread().

template<typename ClassT, typename MethodT>
Cntm::AsyncProcHandle & Cntm::AsyncProcHandle::BindFinishToDeferProc ( ClassT  Object,
MethodT  Method,
SynchroSpace::Ptr  Space = SynchroSpace::Ptr(),
bool  HoldRef = true 
) [inline]

Метод аналогичен методу SetFinishProc.

Данный метод принимает объект и метод и формирует отсроченную отложенную процедуру на основе указанных данных. В качестве аргумента указывается данный объект, что позволяет обработчику завершения получить результат выполнения.

Сигнатура метода Method должна иметь вид: "void(const AsyncProcHandle& res)".

Для удобства использования возвращается этот же объект.

См. Cntm::AsyncProc::SuspendDefer.

Аргументы:
Object - объект-обработчик. Задается обычным указателем.
Method - метод объекта Object, который будет вызван синхронизированно в указанном синхропространстве.
Space - синхропространство, в котором будет выполнен метод. Если явно не указано, тоиспользуется синхропространство объекта Object, если это синхрообъект, иначе используется главное синхропространство.
HoldRef - хранить ли ссылку на объект Object, если это ссылочный объект. Параметр опциональный, значение по умолчанию - true.

Переопределяется в Cntm::AsyncProcResult< ResT > и Cntm::AsyncProcResult< void >.

См. определение в файле AsyncProcHandleImpl.h строка 32

Перекрестные ссылки SetFinishProc() и Cntm::AsyncProc::SuspendDefer().

template<typename ClassT, typename MethodT>
Cntm::AsyncProcHandle & Cntm::AsyncProcHandle::BindFinishToDirectProc ( ClassT  Object,
MethodT  Method,
bool  HoldRef = true 
) [inline]

Метод аналогичен методу SetFinishProc.

Данный метод принимает объект и метод и формирует отсроченную прямую процедуру на основе указанных данных. В качестве аргумента указывается данный объект, что позволяет обработчику завершения получить результат выполнения.

Сигнатура метода Method должна иметь вид: "void(const AsyncProcHandle& res)".

Для удобства использования возвращается этот же объект.

См. Cntm::AsyncProc::SuspendDirect.

Аргументы:
Object - объект-обработчик. Задается обычным указателем.
Method - метод объекта Object, который будет вызван синхронизированно в указанном синхропространстве.
HoldRef - хранить ли ссылку на объект Object, если это ссылочный объект. Параметр опциональный, значение по умолчанию - true.

Переопределяется в Cntm::AsyncProcResult< ResT > и Cntm::AsyncProcResult< void >.

См. определение в файле AsyncProcHandleImpl.h строка 44

Перекрестные ссылки SetFinishProc() и Cntm::AsyncProc::SuspendDirect().

void Cntm::AsyncProcHandle::SetHoldRef ( bool  HoldRef  ) 

Изменить значение параметра HoldRef, указанного при создании асинхронной процедуры.

Это изменение имеет смысл только если указанный при создании объект - с подсчетом ссылок. Этот параметр влияет на хранение ссылки на объект, чей метод будет выполняться. Если параметр устанвлен в true, то на время выполнения метода ссылка на объект будет сохранена, если в false, то нет.

Устанавливать этот параметр в false следует с большой осторожностью, т.к. может привести к уничтожению объекта во время выполнения метода.

Аргументы:
HoldRef - хранить ли ссылку на объект, указанный при создании процедуры, если это ссылочный объект.

См. определение в файле AsyncProcHandle.cpp строка 61

Перекрестные ссылки Proc().

Cntm::AsyncProcHandle::AsyncProcImplPtr Cntm::AsyncProcHandle::Proc (  )  const [protected]

Метод приведения к ссылочному указателю на объект асинхронной процедуры.

См. определение в файле AsyncProcHandle.cpp строка 71

Перекрестные ссылки Cntm::ExecutionUnitHandle::impl и Cntm::RefPtr< T >::StaticCast().


Объявления и описания членов классов находятся в файлах:
SourceForge.net Logo
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой  doxygen 1.5.3