Предоставляет средства для запуска потока активного объекта.
Поток активного объекта является единицей выполнения. Наследует класс 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) |
Запустить поток активного объекта. |
Приоритет потока.
tpNormal | Обычный приоритет. |
tpLow | Пониженный приоритет. |
tpHigh | Повышенный приоритет. |
tpTimeCritical |
Наивысший приоритет.
Может устанавливаться только root'ом. |
См. определение в файле ActiveThread.h строка 52
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
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
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой 1.5.3 |