Re[5]: какой язык ?
От: gid_vvp  
Дата: 29.09.06 13:56
Оценка: 17 (1) :)
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>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.