Re[4]: Активные объекты в С++ в избранное  новое всё   подписка   модер. 
От: Mr. Nonehttp://mrnone.blogspot.com
Дата: 21.03.05 12:21
Здравствуйте, Cyberax, Вы писали:

C>Сергей Губанов пишет:



C>Активный объект в AOS — это ОБЫЧНЫЙ поток. Просто вместо потоковой

C>функции — объект. ВСЕ, БОЛЬШЕ РАЗНИЦЫ НЕТ!

Ну если это так, то это не активный объект и пример г-на Губанова вообще не корректен. Ещё раз определение активного объекта — это объект обладающий собственным потоком управления, в рамках которого будут исполняться все запросы (синхронные или асинхронные) к данному объекту. То есть, активный объект — это не объектная обёртка над потоковой функцией с определённым кодом, а полноценный объект с набором методов, умеющих синхронизировать вызовы этих методов в свой внутренний поток, в котором они будут исполняться... Вот пример простейшего активного объекта:


// Псевдо-код
class MySimpleActiveObject
{
public:
    MySimpleActiveObject() : _stoped(false)
    {
        _thread = create_thread(&ThreadFunc);
    }
    ~MySimpleActiveObject()
    {
        _stoped = true;
        wait_tread(_thread);
    }

    void SomeFunc()
    {
        send_request(_request, SOME_FUNCTION);
    }

private:
    void _SomeFunc()
    {
    }

    void ThreadFunc()
    {
        while(!_stoped)
        {
            int reqCode = waite_request(_request);
            switch(reqCode)
            {
                case SOME_FUNCTION:
                    _SomeFunc();
                break;
            }
        }
    }

    handle _thread;
    handle _request;
    bool _stoped;
};
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.