Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: Bepec от Сентябрь 10, 2012, 10:05



Название: QtDBus - избитая тема?
Отправлено: Bepec от Сентябрь 10, 2012, 10:05
Приветствую знатоков :)

Вопрос: возможно ли собрать и использовать QtDBus под windows? Как?

PS1: Да, я видел тему с сборкой под 2005 студию. Не получилось. Точнее собрать DBus получилось, но вот собрать проект использующий его - нет.
PS2: Да, я смотрел примеры из example, да они не компилятся и неправильные по заверениям нашего же форума.
PS3: Да, сам разобраться не смог, особенно с упоротостью Qt, который не видит QDBusAbstractAdaptor и прочие классы. (пути прописаны, но увы...)
PS4: Прошу помощи ;)

PPS Qt 4.7.2 (сменить низя), W7x64, руки. Буду рад маленькому примеру хотя бы создающего этот адаптерс...


Название: Re: QtDBus - избитая тема?
Отправлено: mutineer от Сентябрь 10, 2012, 10:19
Насколько я видел в интернетах реализация DBus под венды кривая, косая и не факт что работает...
Но в любом случае, ты DBus в винду поставил?


Название: Re: QtDBus - избитая тема?
Отправлено: xokc от Сентябрь 10, 2012, 13:04
Года два назад пробовал - локально всё работало, но забросил - ибо показалось геморройным. Как обстоит сейчас - не знаю.


Название: Re: QtDBus - избитая тема?
Отправлено: Bepec от Сентябрь 10, 2012, 13:07
Собственно я почему соблазнился - возможность использовать службу и любое количество программ на 1 шине. :/

Видимо придётся на сокетах всё делать опять. Ибо действительно геморройное.

PS DBus стоит, примеры qtшные бачат, но... Но блин они не собираются :D  Т.е. бинарники работают, но код примеров какой то отстойно неправильный, на что оно и плюется.

PPS я так понимаю, сокеты под винду - единственно нормальный вариант взаимодействия нескольких приложений?


Название: Re: QtDBus - избитая тема?
Отправлено: Serr500 от Сентябрь 10, 2012, 13:22
я так понимаю, сокеты под винду - единственно нормальный вариант взаимодействия нескольких приложений?
Можно ещё посмотреть в сторону QSystemSemaphore и QSharedMemory. Но по-хорошему под виндой надо использовать [именованные] каналы ([named] pipe), которые, если не ошибаюсь, реализует QLocalSocket.


Название: Re: QtDBus - избитая тема?
Отправлено: Igors от Сентябрь 10, 2012, 13:29
Можно ещё посмотреть в сторону QSystemSemaphore и QSharedMemory. Но по-хорошему под виндой надо использовать [именованные] каналы ([named] pipe), которые, если не ошибаюсь, реализует QLocalSocket.
QSystemSemaphore + QSharedMemory = хорошая рекомендация. Там часто той передачи с гулькин нос, чего запрягать кобылу (DBus или др)? Да и по скорости QSharedMemory первая


Название: Re: QtDBus - избитая тема?
Отправлено: Bepec от Сентябрь 10, 2012, 13:39
Меня прельщало в DBUS возможность связи с нескольких сессий, обёртка с сигналами и возможность подрубать скок угодно любых программ на шину :)

Посмотрю семафоры и шаред мемори, авось пойму что нибудь :)

PS спасибо за ответы.


Название: Re: QtDBus - избитая тема?
Отправлено: Serr500 от Сентябрь 10, 2012, 18:52
Если ограничиться только виндой и требуется посылать сообщения нескольким приложениям, то, возможно, подойдут виндовые широковещательные сообщения. Например, SendMessage (http://msdn.microsoft.com/en-us/library/windows/desktop/ms644950%28v=vs.85%29.aspx) с hWnd=HWND_BROADCAST или BroadcastSystemMessage (http://msdn.microsoft.com/en-us/library/windows/desktop/ms644932%28v=vs.85%29.aspx)


Название: Re: QtDBus - избитая тема?
Отправлено: Bepec от Сентябрь 10, 2012, 19:03
Если честно хотелось кроссплатформенности :) Просто работаю % на 90 под виндой, но эти 10%...
Ну в общем понятно :)


Название: Re: QtDBus - избитая тема?
Отправлено: Igors от Сентябрь 10, 2012, 19:16
Если честно хотелось кроссплатформенности :) Просто работаю % на 90 под виндой, но эти 10%...
Ну в общем понятно :)
Помнится потратил на это (семафор + шаред) дня полтора, никаких трудностей не испытал. Так то в нативняке и для 2-х платформ. На Qt должно быть полдня.

Техника простая: в каждом приложении заводите 2 семафора (имена привязываете к полному пути). На одном семафоре приложение ждет, другой сигналит. Шаред кусок делите на участки, чтобы между приложениями они не пересекались (так проще чем лочить). Ну вот собственно и все  :)