Класс Cntm::ActiveThread
[Cntm.ActiveObjects]

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

Cntm::ExecutionUnit

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


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

Класс потока активного объекта.

Предоставляет средства для запуска потока активного объекта.

Поток активного объекта является единицей выполнения. Наследует класс Cntm::ExecutionUnit, который предоставляет средства для останова единиц выполнения и потоков активных объектов в частности.

Запуск потока производится методом Start()(). Методу Start передается активный объект и указатель на его метод. Метод Start() возвращает специальный объект-фанктор, имеющий operator(), принимающий аргументы для указанного метода объекта, запускающего указанный метод в другом потоке. При вызове указанного метода ему будут переданы аргументы, заданные в методе Start()(). Т.о. вызов метода Start()() выглядит так: Start(активный объект, метод активного объекта)(список аргументов метода активного объекта). При указании аргументов производится проверка типов указанных значений и типов аргументов указанного метода. Типы аргументов должны иметь конструктор копирования, т.к. копии аргументов хранятся на всем протяжении выполнения потока (иначе их невозможно передать в другой поток). Пример: class Class1: public ActiveRefBase { void Thread1(int a, string s) { ... } // Метод, который будет вызван в другом потоке.

Class1() { ActiveThread::Start(this, &Class1::Thread1)(45, "Text"); } // Вызов метода в новом потоке и передача ему аргументов - числа и строки. };

Взаимодействие с созданным потоком осуществляется через хэндл потока активного объекта (класс Cntm::ActiveThreadHandle). Через хэндл можно сообщить потоку об останове. Поток может узнать об останове через методы Terminated() и CheckTerminating(), унаследованные им от класса Cntm::ExecutionUnit().

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

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

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


Открытые типы

enum  ThreadPriority { tpNormal = Cntm::SpecUtils::SysThread::prNormal, tpLow = Cntm::SpecUtils::SysThread::prLow, tpHigh = Cntm::SpecUtils::SysThread::prHigh, tpTimeCritical = Cntm::SpecUtils::SysThread::prTimeCritical }
 Приоритет потока. Подробнее...

Открытые статические члены

template<typename MethodSignatureT>
static
SpecUtils::ActiveThreadFunctor
< typename
SignatureInfo
< MethodSignatureT >
::FuncSign > 
Start (typename SignatureInfo< MethodSignatureT >::ClassType *Object, MethodSignatureT Method, ThreadPriority Priority=tpNormal)
 Запустить поток активного объекта.
template<typename MethodSignatureT>
static
SpecUtils::ActiveThreadFunctor
< typename
SignatureInfo
< MethodSignatureT >
::FuncSign > 
Start (const RefPtr< typename SignatureInfo< MethodSignatureT >::ClassType > &Object, MethodSignatureT Method, ThreadPriority Priority=tpNormal)
 Запустить поток активного объекта.

Перечисления

enum Cntm::ActiveThread::ThreadPriority

Приоритет потока.

Элементы перечислений:
tpNormal  Обычный приоритет.
tpLow  Пониженный приоритет.
tpHigh  Повышенный приоритет.
tpTimeCritical  Наивысший приоритет.

Может устанавливаться только root'ом.

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


Методы

template<typename MethodSignatureT>
static SpecUtils::ActiveThreadFunctor< typename SignatureInfo < MethodSignatureT >::FuncSign > Cntm::ActiveThread::Start ( typename SignatureInfo< MethodSignatureT >::ClassType *  Object,
MethodSignatureT  Method,
ThreadPriority  Priority = tpNormal 
) [inline, static]

Запустить поток активного объекта.

Активный объект задается обычным указателем на объект. Если тип объекта не является производным от Cntm::ActiveObject, то будет выдана ошибка компиляции.

После вызова метода Start() в скобках указываются аргументы, которые следует передать запускаемому в новом потоке методу. Если аргументов нет, ставятся круглые скобки. Если после вызова метода Start() не будет второй пары скобок, то поток запущен не будет. Пример: ActiveThread::Start(this, &Class1::Thread1)(45, "Text"); ActiveThread::Start(this, &Class1::Thread2)(); Метод Start(...) олицетворяет идентификатор функции, а вторая пара скобок - его вызов, поэтому когда говорится о методе Start()() и подобных ему, то указывается две пары скобок.

Метод Start()() возвращает хэндл созданного потока (см. класс Cntm::ActiveThreadHandle).

Исключения: NullArgException - если указатель на активный объект равен NULL, т.е. не задан объект-владелец потока. SystemException - системная ошибка при создании нового потока.

Аргументы:
Object - обычный указатель на активный объект. Не должен равняться NULL.
Method - указатель на метод активного объекта, который будет вызван в новом потоке.
Priority - приоритет создаваемого потока.

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

template<typename MethodSignatureT>
static SpecUtils::ActiveThreadFunctor< typename SignatureInfo < MethodSignatureT >::FuncSign > Cntm::ActiveThread::Start ( const RefPtr< typename SignatureInfo< MethodSignatureT >::ClassType > &  Object,
MethodSignatureT  Method,
ThreadPriority  Priority = tpNormal 
) [inline, static]

Запустить поток активного объекта.

Активный объект задается ссылочным указателем на объект. Если тип объекта не является производным от Cntm::ActiveObject, то будет выдана ошибка компиляции.

После вызова метода Start() в скобках указываются аргументы, которые следует передать запускаемому в новом потоке методу. Если аргументов нет, ставятся круглые скобки. Если после вызова метода Start() не будет второй пары скобок, то поток запущен не будет. Пример: ActiveThread::Start(p1, &Class1::Thread1)(45, "Text"); ActiveThread::Start(p1, &Class1::Thread2)(); Метод Start(...) олицетворяет идентификатор функции, а вторая пара скобок - его вызов, поэтому когда говорится о методе Start()() и подобных ему, то указывается две пары скобок.

Метод Start()() возвращает хэндл созданного потока (см. класс Cntm::ActiveThreadHandle).

Исключения: NullArgException - если ссылочный указатель на активный объект равен NULL, т.е. не задан объект-владелец потока. SystemException - системная ошибка при создании нового потока.

Аргументы:
Object - ссылочный указатель на активный объект. Не должен равняться NULL.
Method - указатель на метод активного объекта, который будет вызван в новом потоке.
Priority - приоритет создаваемого потока.

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


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