Библиотека CntmLib C++  :: Асинхронные процедуры (пакет Cntm.AsyncProc)
Документация
  • Знакомство с 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

  • Главная :: Документация :: Описание классов :: Download 

    © 2005, Овсеевич Р.В.
    SourceForge.net Logo