E>А мы ужеАвтор: Евгений Охотников
Дата: 30.12.05
Вот так всегда... всё разворуют до нас
110 000 строк кода это конечно да...
у меня чуть по скромнее и задачи немного наверно не такие решаются.
2100 примерно
Моя библиотека позволяет любой класс сделать живым (активным) т.е. его объекты будут полностью жить в отведённой им облости обитания (отдельном потоке, общем потоке для одного типа объектов, общем потоке для нескольких типов объектов, в главном потоке приложения ) и все действия с ними в том числе создание и уничтожение будет происходить в их собственной среде обитания, причём с наружи этим живым объектом можно пользоваться точно так же как и его прототипом (объектом класса который был сделан живым с помощю бидлиотеки), за исключением того что функции члены можновызывать в двух (пока) режимах в синхронном и асинхронном. Т.е. при синхронном использовании он неотличим от своего прототипа, за исключеним того что все функции ваполняются в области где живёт данный объект.
Для того чтобы обычный класс превратить в живой нужно очень мало усилий:
это класс который мы хотим сделать живым
class A
{
public:
A(int arg);
A(int arg1, int arg2);
int f1(std::string str);
void f2(int arg);
}
а это он же но живой
class Active
{
public:
Active(int arg)
: m_Active(arg)
{
}
Active(int arg1, int arg2)
: m_Active(arg1, arg2)
{
}
int f1(std::string str)
{
return m_Active.CallSync(&A::f1, str);//Cинхронный вызов
}
void f2(int arg)
{
m_Active.CallAsync(&A::f2, arg);//Асинхронный вызов
}
private:
AOTL::ActiveObjectProxy<A, AOTL::SharedThread<A, std::exception> > m_Active;// данный живой объект живёт в общем потоке
//AOTL::ActiveObjectProxy<A> m_Active;// данный живой объект живёт в своём отдельном потоке
}
использование
A a(1);//конструктор выполняется прямо тут
Active aa(1);//конструктор выполняется в области обитания живого объекта
int i = a.f1("str");//выполняется прямо тут
i = aa.f1("str");//выполняется в области обитания живого объекта, а сюда возвращается результат (этот поток ждёт пока не придёт результат)
a.f2(1);//выполняется прямо тут
aa.f2(1);//выполняется асинхронно в области обитания живого объекта (этот поток не ждёт )
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>