Документация
Знакомство с CntmLib
Общие сведения
Установка и использование
Основные пакеты
Вспомогательные пакеты
Лицензия
Описание классов
|
НАЗНАЧЕНИЕ АСИНХРОННЫХ ПРОЦЕДУР
Асинхронные процедуры позволяют разнести во времени моменты запуска
и выполнения операций. После запуска асинхронной операции программа не
дожидаясь ее окончания переходит к выполнению следующей операции. В качестве
асинхронной операции в библиотеке используется произвольный метод объекта
(т.е. асинхронная операция характеризуется указателем на объект и адресом
метода).
Асинхронные процедуры позволяют запускать методы объектов как
отдельные потоки, выполнять отложенные вызовы методов (отложенные вызовы
обсуждались в синхронизации, Cntm::SynchroSpace и Cntm::DeferEvent). Также
асинхронные процедуры позволяют манипулировать подготовленными вызовами методов
как объектами, которые можно передавать как параметры и т.п. (подготовленный
вызов - это фиксация объекта, метода, аргументов, которые будут переданы методу
при вызове, после этого остается только подать команду запуска выполнения).
Подробное описание асинхронных процедур приведено в Cntm::AsyncProc.
Асинхронные процедуры являются единицами выполнения (наследуют
класс Cntm::ExecutionUnit), поэтому взаимодействие с объектом асинхронной процедуры
происходит с помощью хэндла Cntm::AsyncProcHandle, который позволяет отслеживать
состояние выполнения, запускать (если процедура не была запущена при создании),
останавливать, а также выполнять ряд других действий. Шаблонный класс
Cntm::AsyncProcResult расширяет возможности хэндла для получения возвращаемого
асинхронным методом значения. В качестве параметра указывается тип
возвращаемого значения.
ПРИМЕР ИСПОЛЬЗОВАНИЯ
Пример создания и запуска потока. Поток создается в конструкторе, при запуске
потоковому методу передаются аргументы произвольных типов.
class Class1
{
public:
Class1(int arg, string txt, RefPtr<Class10> cls)
{
// Запуск метода Thread10 в другом потоке.
hdl = AsyncProc::Thread(this, &Class1::Thread10)(arg, txt, cls);
}
~Class1()
{
hdl.Terminate(); // Сигнализация потоку о завершении.
hdl.Wait(); // Ожидание завершения потока.
}
void Thread10(int arg, string txt, RefPtr<Class10> cls)
{
// Пока поток не будет прерван, выполнять какие-то действия.
while (!AsyncProc::Terminated())
{
/*...*/;
}
}
private:
AsyncProcHandle hdl;
};
СМ.
Класс асинхронной процедуры Cntm::AsyncProc
Класс хэндла Cntm::AsyncProcHandle
Классы результатов Cntm::AsyncProcResult и Cntm::AsyncProcResult<void>
Тестовый пример AsyncExp.cpp
|