Наследует класс хэндла единицы выполнения 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) |
Ожидать завершения выполнения асинхронной процедуры. | |
AsyncProcHandle & | SetFinishProc (const AsyncProcHandle &FinishProc) |
Установить обработчик завершения. | |
template<typename ClassT, typename MethodT> | |
AsyncProcHandle & | BindFinishToThreadProc (ClassT Object, MethodT Method, ThreadPriority Priority=tpNormal, bool HoldRef=true) |
Метод аналогичен методу SetFinishProc. | |
template<typename ClassT, typename MethodT> | |
AsyncProcHandle & | BindFinishToDeferProc (ClassT Object, MethodT Method, SynchroSpace::Ptr Space=SynchroSpace::Ptr(), bool HoldRef=true) |
Метод аналогичен методу SetFinishProc. | |
template<typename ClassT, typename MethodT> | |
AsyncProcHandle & | BindFinishToDirectProc (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] |
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().
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().
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().
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().
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой 1.5.3 |