Составители:
Рубрика:
145
Приложение В:
//Получаем доступ к общей памяти QSharedMemory memory ( “key” );
//Ждём пока в памяти не появятся данные,
//проверяем готовность методом memory.isAttached ();
//Подготавливаем данные
QBuffer buffer;
QDataStream in(&buffer);
QImage image;
//Читаем из общей памяти
//Защищаем память от записи
memory.lock();
buffer.setData((char*)memory.constData(), memory.size());
buffer.open(QBuffer::ReadOnly);
in >> image;//например,
//Снимаем защиту
memory.unlock();
//Освобождаем память
memory.detach();
Главные минусы такого подхода:
1. приложение не может получить уведомление о записи в общую память, используя сигналы и
слоты;
2. приложение вынуждено захватывать память (метод memory.lock() ) на время записи;
3. приложения должны заранее знать ключ, по которому записывается и считывается значение из
общей памяти.
11.5.3. Qt D-Bus
Шина данных D-Bus – это самый цивилизованный способ коммуникации приложений. На данный
момент, в ОС Linux именно на его плечах лежит организация связи между приложениями (в том
числе он используется в связке с аппаратной шиной HAL).
Необходимость появления программных шин первоначально возникла в средах GNOME и KDE,
где множеству настольных приложений был необходим удобный механизм связывания.
Первоначально подобная коммуникация осуществлялась по средствам CORBA, SOAP или XML-RPC.
Например, в среде GNOME D-BUS заменил Bonobo, который, в свою очередь, был основан на
CORBA, но в связи с зависимостью от GObject, дальше среды GNOME не использовался.
D-BUS – это механизм IPC (InterProcess Communication), предоставляющий собой шину для
передачи сообщений, ну а если быть точнее, то сразу несколько шин. Первая и самая главная —
системная шина, она создается уже при старте демона D-BUS, и с ее помощью происходит общение
различных демонов. Она хорошо защищена от посторонних, и пользовательские приложения, хоть и
могут подключаться к ней, все же будут значительно ограничены в том, какие сообщения они смогут
туда посылать (в то же время они могут многое «услышать»).
Реальная же рабочая лошадка D-BUS — сессионная шина, создаваемая для любого пользователя,
авторизующегося в системе. Для каждой такой шины запускается отдельная копия демона, и именно
посредством нее будут общаться приложения, с которыми работает этот пользователь.
Для идентификации и объектов используются пути, именуемые в стиле Unix. Так, например, сам
D-BUS доступен по адресу “/org/freedesktop/DBus”.
Каждый объект может поддерживать один или более интерфейсов, которые представлены здесь в
виде именованных групп методов и сигналов — аналогично интерфейсам Glib, Qt или Java.
Страницы
- « первая
- ‹ предыдущая
- …
- 143
- 144
- 145
- 146
- 147
- …
- следующая ›
- последняя »
