Асинхронная процедура - это такая процедура, завершение которой может произойти после начала операции, следующей за вызовом этой процедуры. В частности, через асинхронные процедуры можно запускать потоки.
Асинхронная процедура является единицей выполнения и наследует класс Cntm::ExecutionUnit, который предоставляет средства для останова единиц выполнения и асинхронных процедур в частности.
Создание асинхронной процедуры очень похоже на запуск обычной процедуры. При создании указывается объект, его метод, который будет выполнен асинхронно, дополнительные параметры и аргументы, которые будут переданы методу при его вызове. Рассмотрим пример создания:
AsyncProc::Thread(this, &Class1::AsyncMethod333)("text", 54);
По способу запуска асинхронные процедуры делятся на запущенные при создании и с отсроченным запуском. В первом случае указанный при создании метод будет вызван сразу, как только это будет возможно, а во втором - только после явного запуска асинхронной процедуры. Методы создания отсроченных процедур имеют префиксы Suspend... .
По способу запуска указанного при создании метода асинхронные процедуры делятся на потоковые, отложенные и прямые. Рассмотрим каждый из них.
Потоковые асинхронные процедуры. Создаются статическими методами Thread()() и SuspendThread()(). В них создается новый поток, в котором и будет вызван указанный метод. При создании потоковой асинхронной процедуры м.б. указан приоритет создаваемого потока. Пример:
class Class1: public RefBase { void ThreadMethod1(string s, int e) { ... } // Метод, который будет вызван в другом потоке. void Start() { // Вызов метода в новом потоке и передача ему аргументов - числа и строки. AsyncProc::Thread(this, &Class1::ThreadMethod1)("text", 54); } };
Отложенные асинхронные процедуры. Создаются статическими методами Defer()() и SuspendDefer()(). Об отложенном способе вызова подробно рассказывается в документации по классу Cntm::DeferEvent, т.к. выполнение отложенной асинхронной процедуры имеет много общего с генерацией отложенного события. Вкратце, отложенность процедуры означает, что указанный метод будет вызван не в момент запуска, а при выполнении определенных условий. Отложенная асинхронная процедура тесно связана с понятием синхропространства (ознакомтесь с документацие по классу Cntm::SynchroSpace). Асинхронный метод, указанный при создании, выполняется внутри определенного синхропространства (которое тоже указывается тем или иным способом при создании асинхронной процедуры), вход в которое произведен в реентерабельном режиме. Если запуск процедуры произведен в том синхропространстве, которое указано при создании, то гарантируется, что метод будет запущен только после выхода из этого синхропространства. При создании отложенной асинхронной процедуры требуется указание синхропространства. Если оно не указано явно, то используется главное синхропространство. Пример:
class Class2: public RefBase { void DeferMethod1(const string& s, double e) { ... } // Метод, который будет вызван в другом потоке. void Start() { // Создание отложенной (defer) отсроченной (suspend) процедуры и передача ей // строки и числа, которые будут переданы методу DeferMethod1() при его вызове. AsyncProc::SuspendDefer(this, &Class2::DeferMethod1)("text", 54); } };
Прямые асинхронные процедуры. Создаются статическими методами Direct()() и SuspendDirect()(). По сути представляют вызов указанного при создании метода в момент запуска асинхронной процедуры. Прямая процедура, созданная методом Direct()(), вообще ничем не отличается от вызова указанного при создании метода, поэтому, ни какого интереса не представляет и добавлена только для функциональной полноты. Об использовании метода SuspendDirect()(), как и других отсроченных меодов будет рассказано ниже.
Взаимодействие с созданной асинхронной процедурой, как и с единицами выполнения (Cntm::ExecutionUnit) вообще, осуществляется через хэндл процедуры (класс Cntm::AsyncProcHandle). Хэндл не является шаблонным классом, и никак не зависит от сигнатуры указанного при создании асинхронной процедуры метода. Через хэндл можно сообщить методу процедуры об останове. Асинхронный метод или методы, им запущенные, могут узнать об останове через методы Terminated() и CheckTerminating(), унаследованные им от класса Cntm::ExecutionUnit(). Хэндл предоставляет следующие возможности: узнать тип процедуры, был ли произведен запуск (для отсроченных процедур, обычные запускаются при создании), была ли завершена процедура и если была, то успешно или нет. Также хэндлы позволяют запустить отсроченную асинхронную процедуру, дождаться завершения асинхронной процедуры, установить отсроченную асинхронную процедуру, которая будет вызвана после завершения данной процедуры.
Асинхронный метод может возвращать значение результата. Это значение можно узнать с помощью класса результата асинхронной процедуры - Cntm::AsyncProcResult. Данный класс является шаблоном, параметром которого является тип возвращаемого значения. Класс Cntm::AsyncProcResult наследует Cntm::AsyncProcHandle. Все методы создания асинхронных процедур возвращают именно объект результата. Значение результата можно получить только после завершения асинхронной процедуры.
По своей сути хэндлы и результаты являются ссылочным указателями на объект асинхронной процедуры. Однако отсутствие хэндлов ни как не влияет на выполняющуюся процедуру, но если хэндлов, связанных с отсроченной незапущенной процедурой, не осталось, то эта процедура уже никогда не сможет быть запущена. Наличие хэндлов, связанных с процедурой, влияет только на значение результата асинхронного метода (подробнее об этом - ниже).
Рассмотрим пример асинхронных процедур.
class Class3 { string Work() { sleep(1); ... return "text"; } void Finish(AsyncProcResult<string> res) { cout << res << endl; } void Start() { AsyncProcResult<string> res = AsyncProc::SuspendThread(this, &Class3::Work)(); AsyncProctHandle hdl = AsyncProc::SuspendThread(this, &Class3::Finish)(res); res.SetFinishProc(hdl); cout << "before start" << endl; res.Start(); hdl.Wait(); cout << "after finish" << endl; } }; Вывод на консоль: before start text after finish
Разберем пример. В первой строке Start() создается отсроченная потоковая асинхронная процедура Work(), выполняющая некоторую работу и возвращающая строку. При создании нам возвращается объект результата res, через который мы можем узнать значение, которое вернул метод Work(). Во второй строке Start() создается обработчик завершения метода Work(), которому передается объект результата метода Work(). В третьей строке происходит связывание обработки завершения процедуры Work() с процедурой Finish(). В пятой строке происходит запуск процедуры Work(), которая после завершения запустит процедуру Finish(). Т.к. Work() закончил работу, то Finish() может получить значение результата (кстати, AsyncProcResult имеет оператор преобразования к типу, указанному в шаблоне, поэтому выражение cout << res допустимо). В шестой строке производится ожидание завершения этой цепочки методов.
Все 12 методов создания асинхронных процедур содержат параметры Object и Method. Object - это объект, чей метод Method будет асинхронно вызван. Object может задаваться как ссылочный указатель, как обычный указатель или как обычная ссылка, Method задается как указатель на метод класса, к которому принадлежит Object.
Дополнительные параметры, указываемые при создании асинхронных процедур. При создании потоков методами Thread()() и SuspendThread()() можно указать его приоритет (параметр с именем Priority) (см. перечисление Cntm::BasicAsyncProc::ThreadPriority). При создании отложенных процедур методами Defer()() и SuspendDefer()() требуется указание синхропространства (параметр Space), в котором будет выполняться асинхронный метод. Если синхропространство явно не указано, а переданный объект, метод которого будет выполнен, является синхрообъектом, то будет использовано синхропространство, к которому принадлежит синхрообъект, если передан не синхрообъект, то будет использовано главное синхропространство. Последний параметр всех 12 методов (называется HoldRef) имеет значение, только если переданный объект - с подсчетом ссылок. Этот параметр влияет на хранение ссылки на объект, чей метод будет выполняться. Если параметр устанвлен в true, то на время выполнения метода ссылка на объект будет сохранена (это поведение по умолчанию), если в false, то нет (это поведение следует использовать с большой осторожностью, т.к. может привести к вызову метода несуществующего объекта).
Применение асинхронных процедур.
Потоковые процедуры Thread()() используются для создания потоков с удобной передачей аргументов любых типов и возможностью получения результата. Отложенные процедуры Defer()() используются для синхронизированного выполнения методов объектов, т.к. гарантируют вызов указанного метода внутри синхропространства, например, некий поток может синхронизированно вызвать произвольный метод (для главного синхропространства это означает, что метод будет вызван в главном цикле обработки сообщений, в главном потоке) и либо продолжить работу либо дождаться завершения. Применение отсроченных асинхронных процедур. Они создаются методами Suspend...()(). Отсроченные процедуры можно рассматривать как объекты, инкапсулирующие вызов метода с уже подготовленными аргументами. Такие объекты вызовов можно передавать в качестве параметров (напомним, что любой объект вызова характеризуется нешаблонным хэндлом или результатом, зависящим только от типа возвращаемого значения), запуская или не запуская инкапсулированные вызовы при определенных условиях. Эта методика используется и в самих асинхронных процедурах для задания метода, который будет вызван после завершения выполнения асинхронной процедуры. В отличии от обычной прямой процедуры отсроченная прямая процедура SuspendDirect()() является логичной, полезной и вполне асинхронной.
Особенности.
При создании асинхронной процедуры указываются аргументы, которые впоследствии будут переданы асинхронному методу при его вызове. Для этого производится копирование значений аргументов во внутренний буфер с помощью конструкторов копирования. Копии аргументов будут уничтожены сразу после завершения работы асинхронного метода. Асинхронная процедура хранит копию результата, который вернул асинхронный метод. Значение результата создается с помощью конструктора копирования после завершения асинхронного метода. Значение результата будет уничтожено вместе с уничтожением объекта асинхронной процедуры, т.е. когда не останется ни одного хэндла, связанного с процедурой. Если процедура хранит ссылку на объект, то эта ссылка будет уничтожена сразу после завершения работы асинхронного метода. Если для отсроченной незапущенной процедуры были утеряны все хэндлы, то происходит уничтожение объекта процедуры вместе с копиями аргументов и ссылкой на объект (если она имелась).
Принудительный останов асинхронных процедур. Если принудительный останов отсроченной процедуры (метод Cntm::AsyncProcHandle::Terminate()) произведен до ее запуска (метод Cntm::AsyncProcHandle::Start()), то производится ее завершение (устанавливается флаг завершения, запускается обработчик завершения и т.д.), а указанный при создании метод объекта никогда вызван не будет. При принудительном останове запущенной процедуры гарантируется, что вызов указанного при создании метода объекта будет произведен (конечно, если не было ошибок при запуске).
Данный класс обеспечивает многопоточность.
См. определение в файле AsyncProc.h строка 247
Открытые статические члены | |
template<typename MethodSignatureT> | |
static SpecUtils::ThreadProcFunctor < typename SignatureInfo < MethodSignatureT > ::FuncSign > | Thread (typename SignatureInfo< MethodSignatureT >::ClassType *Object, MethodSignatureT Method, ThreadPriority Priority=tpNormal, bool HoldRef=true) |
Создать и запустить асинхронную потоковую процедуру. | |
template<typename MethodSignatureT> | |
static SpecUtils::ThreadProcFunctor < typename SignatureInfo < MethodSignatureT > ::FuncSign > | Thread (RefPtr< typename SignatureInfo< MethodSignatureT >::ClassType > Object, MethodSignatureT Method, ThreadPriority Priority=tpNormal, bool HoldRef=true) |
Создать и запустить асинхронную потоковую процедуру. | |
template<typename MethodSignatureT> | |
static SpecUtils::ThreadProcFunctor < typename SignatureInfo < MethodSignatureT > ::FuncSign > | SuspendThread (typename SignatureInfo< MethodSignatureT >::ClassType *Object, MethodSignatureT Method, ThreadPriority Priority=tpNormal, bool HoldRef=true) |
Создать асинхронную потоковую процедуру без ее запуска. | |
template<typename MethodSignatureT> | |
static SpecUtils::ThreadProcFunctor < typename SignatureInfo < MethodSignatureT > ::FuncSign > | SuspendThread (RefPtr< typename SignatureInfo< MethodSignatureT >::ClassType > Object, MethodSignatureT Method, ThreadPriority Priority=tpNormal, bool HoldRef=true) |
Создать асинхронную потоковую процедуру без ее запуска. | |
template<typename MethodSignatureT> | |
static SpecUtils::DeferProcFunctor < typename SignatureInfo < MethodSignatureT > ::FuncSign > | Defer (typename SignatureInfo< MethodSignatureT >::ClassType *Object, MethodSignatureT Method, SynchroSpace::Ptr Space=SynchroSpace::Ptr(), bool HoldRef=true) |
Создать и запустить асинхронную отложенную процедуру. | |
template<typename MethodSignatureT> | |
static SpecUtils::DeferProcFunctor < typename SignatureInfo < MethodSignatureT > ::FuncSign > | Defer (RefPtr< typename SignatureInfo< MethodSignatureT >::ClassType > Object, MethodSignatureT Method, SynchroSpace::Ptr Space=SynchroSpace::Ptr(), bool HoldRef=true) |
Создать и запустить асинхронную отложенную процедуру. | |
template<typename MethodSignatureT> | |
static SpecUtils::DeferProcFunctor < typename SignatureInfo < MethodSignatureT > ::FuncSign > | SuspendDefer (typename SignatureInfo< MethodSignatureT >::ClassType *Object, MethodSignatureT Method, SynchroSpace::Ptr Space=SynchroSpace::Ptr(), bool HoldRef=true) |
Создать асинхронную отсроченную отложенную процедуру. | |
template<typename MethodSignatureT> | |
static SpecUtils::DeferProcFunctor < typename SignatureInfo < MethodSignatureT > ::FuncSign > | SuspendDefer (RefPtr< typename SignatureInfo< MethodSignatureT >::ClassType > Object, MethodSignatureT Method, SynchroSpace::Ptr Space=SynchroSpace::Ptr(), bool HoldRef=true) |
Создать асинхронную отсроченную отложенную процедуру. | |
template<typename MethodSignatureT> | |
static SpecUtils::DirectProcFunctor < typename SignatureInfo < MethodSignatureT > ::FuncSign > | Direct (typename SignatureInfo< MethodSignatureT >::ClassType *Object, MethodSignatureT Method, bool HoldRef=true) |
Создать и запустить прямую процедуру. | |
template<typename MethodSignatureT> | |
static SpecUtils::DirectProcFunctor < typename SignatureInfo < MethodSignatureT > ::FuncSign > | Direct (RefPtr< typename SignatureInfo< MethodSignatureT >::ClassType > Object, MethodSignatureT Method, bool HoldRef=true) |
Создать и запустить прямую процедуру. | |
template<typename MethodSignatureT> | |
static SpecUtils::DirectProcFunctor < typename SignatureInfo < MethodSignatureT > ::FuncSign > | SuspendDirect (typename SignatureInfo< MethodSignatureT >::ClassType *Object, MethodSignatureT Method, bool HoldRef=true) |
Создать прямую процедуру. | |
template<typename MethodSignatureT> | |
static SpecUtils::DirectProcFunctor < typename SignatureInfo < MethodSignatureT > ::FuncSign > | SuspendDirect (RefPtr< typename SignatureInfo< MethodSignatureT >::ClassType > Object, MethodSignatureT Method, bool HoldRef=true) |
Создать прямую процедуру. |
static SpecUtils::ThreadProcFunctor< typename SignatureInfo < MethodSignatureT >::FuncSign > Cntm::AsyncProc::Thread | ( | typename SignatureInfo< MethodSignatureT >::ClassType * | Object, | |
MethodSignatureT | Method, | |||
ThreadPriority | Priority = tpNormal , |
|||
bool | HoldRef = true | |||
) | [inline, static] |
Создать и запустить асинхронную потоковую процедуру.
Создается новый поток и в нем производится запуск метода Method объекта Object.
Формат вызова: Thread(параметры процедуры)(аргументы асинхронного метода). Если аргументов нет, то просто ставятся круглые скобки.
Возвращается объект результата асинхронной процедуры Cntm::AsyncProcResult.
Исключения: NullArgException - не указан объект обработчик (Object равен NULL). IllegalStateException - сылочный объект, обрабатывающий процедуру, находится в удаляемом состоянии. Если требуется создать процедуру для выполнения в удаляемом состоянии объекта-обработчика, следует установить параметр HoldRef в false. SystemException - системная ошибка при создании нового потока.
Object | - объект-обработчик. Задается обычным указателем. | |
Method | - метод объекта Object, который будет вызван асинхронно в другом потоке. | |
Priority | - приоритет потока, опционально, значение по умолчанию - tpNormal (см. перечисление Cntm::BasicAsyncProc::ThreadPriority). | |
HoldRef | - хранить ли ссылку на объект Object, если это ссылочный объект. Параметр опциональный, значение по умолчанию - true. |
См. определение в файле AsyncProc.h строка 268
static SpecUtils::ThreadProcFunctor< typename SignatureInfo < MethodSignatureT >::FuncSign > Cntm::AsyncProc::Thread | ( | RefPtr< typename SignatureInfo< MethodSignatureT >::ClassType > | Object, | |
MethodSignatureT | Method, | |||
ThreadPriority | Priority = tpNormal , |
|||
bool | HoldRef = true | |||
) | [inline, static] |
Создать и запустить асинхронную потоковую процедуру.
Создается новый поток и в нем производится запуск метода Method объекта Object.
Формат вызова: Thread(параметры процедуры)(аргументы асинхронного метода). Если аргументов нет, то просто ставятся круглые скобки.
Возвращается объект результата асинхронной процедуры Cntm::AsyncProcResult.
Исключения: NullArgException - не указан объект обработчик (Object равен NULL). IllegalStateException - сылочный объект, обрабатывающий процедуру, находится в удаляемом состоянии. Если требуется создать процедуру для выполнения в удаляемом состоянии объекта-обработчика, следует установить параметр HoldRef в false. SystemException - системная ошибка при создании нового потока.
Object | - объект-обработчик. Задается ссылочным указателем. | |
Method | - метод объекта Object, который будет вызван асинхронно в другом потоке. | |
Priority | - приоритет потока, опционально, значение по умолчанию - tpNormal (см. перечисление Cntm::BasicAsyncProc::ThreadPriority). | |
HoldRef | - хранить ли ссылку на объект Object, если это ссылочный объект. Параметр опциональный, значение по умолчанию - true. |
См. определение в файле AsyncProc.h строка 295
static SpecUtils::ThreadProcFunctor< typename SignatureInfo < MethodSignatureT >::FuncSign > Cntm::AsyncProc::SuspendThread | ( | typename SignatureInfo< MethodSignatureT >::ClassType * | Object, | |
MethodSignatureT | Method, | |||
ThreadPriority | Priority = tpNormal , |
|||
bool | HoldRef = true | |||
) | [inline, static] |
Создать асинхронную потоковую процедуру без ее запуска.
Запуск можно произвести через хэндл или результат.
Формат вызова: SuspendThread(параметры процедуры)(аргументы асинхронного метода). Если аргументов нет, то просто ставятся круглые скобки.
Возвращается объект результата асинхронной процедуры Cntm::AsyncProcResult.
Исключения: NullArgException - не указан объект обработчик (Object равен NULL). IllegalStateException - сылочный объект, обрабатывающий процедуру, находится в удаляемом состоянии. Если требуется создать процедуру для выполнения в удаляемом состоянии объекта-обработчика, следует установить параметр HoldRef в false.
Object | - объект-обработчик. Задается обычным указателем. | |
Method | - метод объекта Object, который будет вызван асинхронно в другом потоке. | |
Priority | - приоритет потока, опционально, значение по умолчанию - tpNormal (см. перечисление Cntm::BasicAsyncProc::ThreadPriority). | |
HoldRef | - хранить ли ссылку на объект Object, если это ссылочный объект. Параметр опциональный, значение по умолчанию - true. |
См. определение в файле AsyncProc.h строка 321
static SpecUtils::ThreadProcFunctor< typename SignatureInfo < MethodSignatureT >::FuncSign > Cntm::AsyncProc::SuspendThread | ( | RefPtr< typename SignatureInfo< MethodSignatureT >::ClassType > | Object, | |
MethodSignatureT | Method, | |||
ThreadPriority | Priority = tpNormal , |
|||
bool | HoldRef = true | |||
) | [inline, static] |
Создать асинхронную потоковую процедуру без ее запуска.
Запуск можно произвести через хэндл или результат.
Формат вызова: SuspendThread(параметры процедуры)(аргументы асинхронного метода). Если аргументов нет, то просто ставятся круглые скобки.
Возвращается объект результата асинхронной процедуры Cntm::AsyncProcResult.
Исключения: NullArgException - не указан объект обработчик (Object равен NULL). IllegalStateException - сылочный объект, обрабатывающий процедуру, находится в удаляемом состоянии. Если требуется создать процедуру для выполнения в удаляемом состоянии объекта-обработчика, следует установить параметр HoldRef в false.
Object | - объект-обработчик. Задается ссылочным указателем. | |
Method | - метод объекта Object, который будет вызван асинхронно в другом потоке. | |
Priority | - приоритет потока, опционально, значение по умолчанию - tpNormal (см. перечисление Cntm::BasicAsyncProc::ThreadPriority). | |
HoldRef | - хранить ли ссылку на объект Object, если это ссылочный объект. Параметр опциональный, значение по умолчанию - true. |
См. определение в файле AsyncProc.h строка 347
static SpecUtils::DeferProcFunctor< typename SignatureInfo < MethodSignatureT >::FuncSign > Cntm::AsyncProc::Defer | ( | typename SignatureInfo< MethodSignatureT >::ClassType * | Object, | |
MethodSignatureT | Method, | |||
SynchroSpace::Ptr | Space = SynchroSpace::Ptr() , |
|||
bool | HoldRef = true | |||
) | [inline, static] |
Создать и запустить асинхронную отложенную процедуру.
Производит синхронизированный запуск метода Method объекта Object в указанном синхропространстве Space. Если объект Object является синхрообъектом и синхропространство явно не указано, то используется синхропространство, к которому принадлежит синхрообъект (свойство Cntm::SynchroObject::Space()). Если объект Object не является синхрообъектом и синхропространство явно не указано, то используется главное синхропространство.
Формат вызова: Defer(параметры процедуры)(аргументы асинхронного метода). Если аргументов нет, то просто ставятся круглые скобки.
Возвращается объект результата асинхронной процедуры Cntm::AsyncProcResult.
Исключения: NullArgException - не указан объект обработчик (Object равен NULL). IllegalStateException - сылочный объект, обрабатывающий процедуру, находится в удаляемом состоянии. Если требуется создать процедуру для выполнения в удаляемом состоянии объекта-обработчика, следует установить параметр HoldRef в false. IllegalStateException - если синхропространство не указано явно, объект не является синхрообъектом и не создано главное синхропространство.
Object | - объект-обработчик. Задается обычным указателем. | |
Method | - метод объекта Object, который будет вызван синхронизированно в указанном синхропространстве. | |
Space | - синхропространство, в котором будет выполнен метод. Если явно не указано, тоиспользуется синхропространство объекта Object, если это синхрообъект, иначе используется главное синхропространство. | |
HoldRef | - хранить ли ссылку на объект Object, если это ссылочный объект. Параметр опциональный, значение по умолчанию - true. |
См. определение в файле AsyncProc.h строка 374
static SpecUtils::DeferProcFunctor< typename SignatureInfo < MethodSignatureT >::FuncSign > Cntm::AsyncProc::Defer | ( | RefPtr< typename SignatureInfo< MethodSignatureT >::ClassType > | Object, | |
MethodSignatureT | Method, | |||
SynchroSpace::Ptr | Space = SynchroSpace::Ptr() , |
|||
bool | HoldRef = true | |||
) | [inline, static] |
Создать и запустить асинхронную отложенную процедуру.
Производит синхронизированный запуск метода Method объекта Object в указанном синхропространстве Space. Если объект Object является синхрообъектом и синхропространство явно не указано, то используется синхропространство, к которому принадлежит синхрообъект (свойство Cntm::SynchroObject::Space()). Если объект Object не является синхрообъектом и синхропространство явно не указано, то используется главное синхропространство.
Формат вызова: Defer(параметры процедуры)(аргументы асинхронного метода). Если аргументов нет, то просто ставятся круглые скобки.
Возвращается объект результата асинхронной процедуры Cntm::AsyncProcResult.
Исключения: NullArgException - не указан объект обработчик (Object равен NULL). IllegalStateException - сылочный объект, обрабатывающий процедуру, находится в удаляемом состоянии. Если требуется создать процедуру для выполнения в удаляемом состоянии объекта-обработчика, следует установить параметр HoldRef в false. IllegalStateException - если синхропространство не указано явно, объект не является синхрообъектом и не создано главное синхропространство.
Object | - объект-обработчик. Задается ссылочным указателем. | |
Method | - метод объекта Object, который будет вызван синхронизированно в указанном синхропространстве. | |
Space | - синхропространство, в котором будет выполнен метод. Если явно не указано, тоиспользуется синхропространство объекта Object, если это синхрообъект, иначе используется главное синхропространство. | |
HoldRef | - хранить ли ссылку на объект Object, если это ссылочный объект. Параметр опциональный, значение по умолчанию - true. |
См. определение в файле AsyncProc.h строка 401
static SpecUtils::DeferProcFunctor< typename SignatureInfo < MethodSignatureT >::FuncSign > Cntm::AsyncProc::SuspendDefer | ( | typename SignatureInfo< MethodSignatureT >::ClassType * | Object, | |
MethodSignatureT | Method, | |||
SynchroSpace::Ptr | Space = SynchroSpace::Ptr() , |
|||
bool | HoldRef = true | |||
) | [inline, static] |
Создать асинхронную отсроченную отложенную процедуру.
Когда процедура будет запущена, то метод Method объекта Object будет синхронизированно вызван в указанном синхропространстве Space. Если объект Object является синхрообъектом и синхропространство явно не указано, то используется синхропространство, к которому принадлежит синхрообъект (свойство Cntm::SynchroObject::Space()). Если объект Object не является синхрообъектом и синхропространство явно не указано, то используется главное синхропространство.
Формат вызова: SuspendDefer(параметры процедуры)(аргументы асинхронного метода). Если аргументов нет, то просто ставятся круглые скобки.
Возвращается объект результата асинхронной процедуры Cntm::AsyncProcResult.
Исключения: NullArgException - не указан объект обработчик (Object равен NULL). IllegalStateException - сылочный объект, обрабатывающий процедуру, находится в удаляемом состоянии. Если требуется создать процедуру для выполнения в удаляемом состоянии объекта-обработчика, следует установить параметр HoldRef в false. IllegalStateException - если синхропространство не указано явно, объект не является синхрообъектом и не создано главное синхропространство.
Object | - объект-обработчик. Задается обычным указателем. | |
Method | - метод объекта Object, который будет вызван синхронизированно в указанном синхропространстве. | |
Space | - синхропространство, в котором будет выполнен метод. Если явно не указано, тоиспользуется синхропространство объекта Object, если это синхрообъект, иначе используется главное синхропространство. | |
HoldRef | - хранить ли ссылку на объект Object, если это ссылочный объект. Параметр опциональный, значение по умолчанию - true. |
См. определение в файле AsyncProc.h строка 428
static SpecUtils::DeferProcFunctor< typename SignatureInfo < MethodSignatureT >::FuncSign > Cntm::AsyncProc::SuspendDefer | ( | RefPtr< typename SignatureInfo< MethodSignatureT >::ClassType > | Object, | |
MethodSignatureT | Method, | |||
SynchroSpace::Ptr | Space = SynchroSpace::Ptr() , |
|||
bool | HoldRef = true | |||
) | [inline, static] |
Создать асинхронную отсроченную отложенную процедуру.
Когда процедура будет запущена, то метод Method объекта Object будет синхронизированно вызван в указанном синхропространстве Space. Если объект Object является синхрообъектом и синхропространство явно не указано, то используется синхропространство, к которому принадлежит синхрообъект (свойство Cntm::SynchroObject::Space()). Если объект Object не является синхрообъектом и синхропространство явно не указано, то используется главное синхропространство.
Формат вызова: SuspendDefer(параметры процедуры)(аргументы асинхронного метода). Если аргументов нет, то просто ставятся круглые скобки.
Возвращается объект результата асинхронной процедуры Cntm::AsyncProcResult.
Исключения: NullArgException - не указан объект обработчик (Object равен NULL). IllegalStateException - сылочный объект, обрабатывающий процедуру, находится в удаляемом состоянии. Если требуется создать процедуру для выполнения в удаляемом состоянии объекта-обработчика, следует установить параметр HoldRef в false. IllegalStateException - если синхропространство не указано явно, объект не является синхрообъектом и не создано главное синхропространство.
Object | - объект-обработчик. Задается ссылочным указателем. | |
Method | - метод объекта Object, который будет вызван синхронизированно в указанном синхропространстве. | |
Space | - синхропространство, в котором будет выполнен метод. Если явно не указано, тоиспользуется синхропространство объекта Object, если это синхрообъект, иначе используется главное синхропространство. | |
HoldRef | - хранить ли ссылку на объект Object, если это ссылочный объект. Параметр опциональный, значение по умолчанию - true. |
См. определение в файле AsyncProc.h строка 455
static SpecUtils::DirectProcFunctor< typename SignatureInfo < MethodSignatureT >::FuncSign > Cntm::AsyncProc::Direct | ( | typename SignatureInfo< MethodSignatureT >::ClassType * | Object, | |
MethodSignatureT | Method, | |||
bool | HoldRef = true | |||
) | [inline, static] |
Создать и запустить прямую процедуру.
По сути, ни чем не отличается от обычного запуска метода Method объекта Object.
Формат вызова: Direct(параметры процедуры)(аргументы асинхронного метода). Если аргументов нет, то просто ставятся круглые скобки.
Возвращается объект результата асинхронной процедуры Cntm::AsyncProcResult.
Исключения: NullArgException - не указан объект обработчик (Object равен NULL). IllegalStateException - сылочный объект, обрабатывающий процедуру, находится в удаляемом состоянии. Если требуется создать процедуру для выполнения в удаляемом состоянии объекта-обработчика, следует установить параметр HoldRef в false.
Object | - объект-обработчик. Задается обычным указателем. | |
Method | - метод объекта Object, который будет вызван при создании процедуры. | |
HoldRef | - хранить ли ссылку на объект Object, если это ссылочный объект. Параметр опциональный, значение по умолчанию - true. |
См. определение в файле AsyncProc.h строка 480
static SpecUtils::DirectProcFunctor< typename SignatureInfo < MethodSignatureT >::FuncSign > Cntm::AsyncProc::Direct | ( | RefPtr< typename SignatureInfo< MethodSignatureT >::ClassType > | Object, | |
MethodSignatureT | Method, | |||
bool | HoldRef = true | |||
) | [inline, static] |
Создать и запустить прямую процедуру.
По сути, ни чем не отличается от обычного запуска метода Method объекта Object.
Формат вызова: Direct(параметры процедуры)(аргументы асинхронного метода). Если аргументов нет, то просто ставятся круглые скобки.
Возвращается объект результата асинхронной процедуры Cntm::AsyncProcResult.
Исключения: NullArgException - не указан объект обработчик (Object равен NULL). IllegalStateException - сылочный объект, обрабатывающий процедуру, находится в удаляемом состоянии. Если требуется создать процедуру для выполнения в удаляемом состоянии объекта-обработчика, следует установить параметр HoldRef в false.
Object | - объект-обработчик. Задается ссылочным указателем. | |
Method | - метод объекта Object, который будет вызван при создании процедуры. | |
HoldRef | - хранить ли ссылку на объект Object, если это ссылочный объект. Параметр опциональный, значение по умолчанию - true. |
См. определение в файле AsyncProc.h строка 504
static SpecUtils::DirectProcFunctor< typename SignatureInfo < MethodSignatureT >::FuncSign > Cntm::AsyncProc::SuspendDirect | ( | typename SignatureInfo< MethodSignatureT >::ClassType * | Object, | |
MethodSignatureT | Method, | |||
bool | HoldRef = true | |||
) | [inline, static] |
Создать прямую процедуру.
Подготавливает вызов метода Method объекта Object.
Формат вызова: SuspendDirect(параметры процедуры)(аргументы асинхронного метода). Если аргументов нет, то просто ставятся круглые скобки.
Возвращается объект результата асинхронной процедуры Cntm::AsyncProcResult.
Исключения: NullArgException - не указан объект обработчик (Object равен NULL). IllegalStateException - сылочный объект, обрабатывающий процедуру, находится в удаляемом состоянии. Если требуется создать процедуру для выполнения в удаляемом состоянии объекта-обработчика, следует установить параметр HoldRef в false.
Object | - объект-обработчик. Задается обычным указателем. | |
Method | - метод объекта Object, который будет вызван при создании процедуры. | |
HoldRef | - хранить ли ссылку на объект Object, если это ссылочный объект. Параметр опциональный, значение по умолчанию - true. |
См. определение в файле AsyncProc.h строка 528
static SpecUtils::DirectProcFunctor< typename SignatureInfo < MethodSignatureT >::FuncSign > Cntm::AsyncProc::SuspendDirect | ( | RefPtr< typename SignatureInfo< MethodSignatureT >::ClassType > | Object, | |
MethodSignatureT | Method, | |||
bool | HoldRef = true | |||
) | [inline, static] |
Создать прямую процедуру.
Подготавливает вызов метода Method объекта Object.
Формат вызова: SuspendDirect(параметры процедуры)(аргументы асинхронного метода). Если аргументов нет, то просто ставятся круглые скобки.
Возвращается объект результата асинхронной процедуры Cntm::AsyncProcResult.
Исключения: NullArgException - не указан объект обработчик (Object равен NULL). IllegalStateException - сылочный объект, обрабатывающий процедуру, находится в удаляемом состоянии. Если требуется создать процедуру для выполнения в удаляемом состоянии объекта-обработчика, следует установить параметр HoldRef в false.
Object | - объект-обработчик. Задается ссылочным указателем. | |
Method | - метод объекта Object, который будет вызван при создании процедуры. | |
HoldRef | - хранить ли ссылку на объект Object, если это ссылочный объект. Параметр опциональный, значение по умолчанию - true. |
См. определение в файле AsyncProc.h строка 552
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой 1.5.3 |