Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Сообщение из потока |
Автор: Gwendolen 12.8.2008, 20:03 |
Проектирую структуру кросплатформенного (Windows и Linux) многопоточного приложения. С программированием под Linux знаком мало (работал только с QT под обоими платформами). Собственно задача: Необходимо посылать сообщения из функций, находящихся в динамических библиотеках (поток для них создает исполняемый файл). Если бы писал только под Windows то было бы оптимально PostThreadMessage или Post/SendMessage и цикл обработки сообщений потока/окна. Пока только приходит в голову callback функция в исполняемом файле, которая помещает данные сообщения в потокобезопасный контейнер и генерирует собщение, что его в контейнере есть данные. Так как она находится в исполняемом файле то смело можно использовать сообщения QT, на котором я планирую создавать интерфейс. P.S. Желательно также, чтобы метод позволял разрабатывать динамические библиотеки не только на С. |
Автор: SABROG 12.8.2008, 22:02 | ||
Qt вполне позволяет соединять сигналы со слотами из других потоков:
|
Автор: Alek86 13.8.2008, 10:11 |
удалено |
Автор: Cycle 13.8.2008, 14:21 |
Универсальное? А что есть и в Линуксе и Виндовс? Например socks. Правда при работе с socks все равно придется некоторые участки кода обрамлять в #ifdef WIN32 |
Автор: Alek86 13.8.2008, 15:04 |
если длл может писаться на любом языке и под любые платформы, то подойдет только общая технология типа COM (не знаю. правда. как он реализуется под линухом) или .Net |
Автор: Ulysses4j 13.8.2008, 15:30 |
Gwendolen, вопрос я понял плохо. Могу сказать, что во-первых, надо понять, что бинарной переносимости между win32 и linux нет, и ничто это не исправит: нужно делать разные сборки под разные платформы. Переносимости на уровне исходных кодов можно добиться за счет использования библиотек (Boost, в частности, его потоковая библиотека, Qt, wxWidgets...). Если вы создаете распределенное приложение, часть которого выполняется на одной платформе, часть на другой, то взаимодействие между ними можно организовывать традиционными средстванми: сокеты, ICE, недавно опубликованная Google Protocol Buffers из бинарных или XML-RPC, web servicies из текстовых. COM и CORBA, если ничто извне не вынуждает их использовать, это оверкил: очень сложные, поддержка есть только для COM под Windows, в остальных сочетаниях вам придется довольно тяжко (хотя и в случае COM под win32 все тоже тяжко). Ничего особо эксклюзивного они сами по себе не представляют (имеет смысл использовать, повторю, если есть уже что-то на них написанное). |
Автор: Gwendolen 13.8.2008, 19:16 |
Бинарная переносимость не требуется, требуется максимально возможная переносимость кода. Похоже код, прийдется разделять и для потправки сообщений использовать API конкретной ОС (не обработку сообщений с помощью каких либо библиотек). |
Автор: Ulysses4j 13.8.2008, 19:28 |
Если спользовать API конкретной ОС, переносимости кода не будет, надо использовать API какой-либо библиотеки-обертки над API ОС. |
Автор: Gwendolen 13.8.2008, 20:06 | ||
А вот это как раз не желательно. В принципе продолжение темы корректней продолжить здесь: http://forum.vingrad.ru/index.php?showtopic=224340&view=findpost&p=1610368 |
Автор: andrew_121 15.8.2008, 01:44 |
Чё то я не врубаюсь. ![]() Похоже что автор сам еще не знает что ему нужно, или не знает нужно ли ему хоть что-то... Ну понаблюдаем... Я думаю автору статьи нужно написать абсолютно новую ОС. На которой будет API Windows, но на самом деле это Linux. Или наоборот. Это единственное решение. ![]() |
Автор: bsa 17.8.2008, 16:23 | ||
WINE - и ничего писать не нужно ![]() |
Автор: andrew_121 17.8.2008, 16:40 |
bsa, Извращение какое-то ![]() |
Автор: jonie 17.8.2008, 18:44 |
есть штука - очереди гарантированной доставки. они есть и кросплатформенные (IBM чета там). не велосипеды, и дают ряд преимещуств. почитайте книгу Шаблоны интеграции корпаративных приложений, там это описывается довольно неплохо.... |