Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сообщение из потока, Кросплатформенный алгоритм обработки 
:(
    Опции темы
Gwendolen
Дата 12.8.2008, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 5.4.2005

Репутация: нет
Всего: 1



Проектирую структуру кросплатформенного (Windows и Linux) многопоточного приложения.
С программированием под Linux знаком мало (работал только с QT под обоими платформами).

Собственно задача:
Необходимо посылать сообщения из функций, находящихся в динамических библиотеках (поток для них создает исполняемый файл).

Если бы писал только под Windows то было бы оптимально PostThreadMessage или Post/SendMessage и цикл обработки сообщений потока/окна.
Пока только приходит в голову callback функция в исполняемом файле, которая помещает данные сообщения в потокобезопасный контейнер и генерирует собщение, что его в контейнере есть данные. Так как она находится в исполняемом файле то смело можно использовать сообщения QT, на котором я планирую создавать интерфейс.

P.S. Желательно также, чтобы метод позволял разрабатывать динамические библиотеки не только на С.
--------------------
Наносите пользу и причиняйте добро!
PM MAIL   Вверх
SABROG
Дата 12.8.2008, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 4
Всего: 91



Qt вполне позволяет соединять сигналы со слотами из других потоков:

Цитата

Each QThread can have its own event loop. You can start the event loop by calling exec(); you can stop it by calling exit() or quit(). Having an event loop in a thread makes it possible to connect signals from other threads to slots in this threads, using a mechanism called queued connections. It also makes it possible to use classes that require the event loop, such as QTimer and QTcpSocket, in the thread. Note, however, that is is not possible to use any widget classes in the thread. 



--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Gwendolen
Дата 13.8.2008, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 5.4.2005

Репутация: нет
Всего: 1



Цитата(SABROG @  12.8.2008,  22:02 Найти цитируемый пост)
Qt вполне позволяет соединять сигналы со слотами из других потоков

Отлично это знаю, а если динамическая библиотека разрабатывается на другом языке (например Delphi). Так как библиотеки планируется применять как модули расширения - плугины.
Надо чтото более универсальное, хотябы с использованием стандартной библиотеки С++.
--------------------
Наносите пользу и причиняйте добро!
PM MAIL   Вверх
Alek86
Дата 13.8.2008, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



удалено

Это сообщение отредактировал(а) Alek86 - 13.8.2008, 10:11


--------------------
user posted image    user posted image
PM MAIL   Вверх
Cycle
  Дата 13.8.2008, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 1.12.2007

Репутация: 3
Всего: 3



Универсальное? А что есть и в Линуксе и Виндовс? 
Например socks. Правда при работе с socks все равно придется некоторые участки кода обрамлять в  #ifdef WIN32
PM MAIL   Вверх
Alek86
Дата 13.8.2008, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



если длл может писаться на любом языке и под любые платформы, то подойдет только общая технология типа COM (не знаю. правда. как он реализуется под линухом) или .Net


--------------------
user posted image    user posted image
PM MAIL   Вверх
Ulysses4j
Дата 13.8.2008, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 6.6.2007
Где: Ростов-на-Дону

Репутация: 4
Всего: 10



Gwendolen, вопрос я понял плохо. Могу сказать, что во-первых, надо понять, что бинарной переносимости между win32 и linux нет, и ничто это не исправит: нужно делать разные сборки под разные платформы. Переносимости на уровне исходных кодов можно добиться за счет использования библиотек (Boost, в частности, его потоковая библиотека, Qt, wxWidgets...). 

Если вы создаете распределенное приложение, часть которого выполняется на одной платформе, часть на другой, то взаимодействие между ними можно организовывать традиционными средстванми: сокеты, ICE, недавно опубликованная Google Protocol Buffers из бинарных или XML-RPC, web servicies из текстовых. 

COM и CORBA, если ничто извне не вынуждает их использовать, это оверкил: очень сложные, поддержка есть только для COM под Windows, в остальных сочетаниях вам придется довольно тяжко (хотя и в случае COM под win32 все тоже тяжко). Ничего особо эксклюзивного они сами по себе не представляют (имеет смысл использовать, повторю, если есть уже что-то на них написанное).

Это сообщение отредактировал(а) Ulysses4j - 13.8.2008, 15:32


--------------------
Communication is critical to the job of a programmer.
C. Jazdzewski. Fatherly Advice To New Programmers
PM MAIL WWW   Вверх
Gwendolen
Дата 13.8.2008, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 5.4.2005

Репутация: нет
Всего: 1



Цитата(Ulysses4j @  13.8.2008,  15:30 Найти цитируемый пост)
бинарной переносимости между win32 и linux нет

Бинарная переносимость не требуется, требуется максимально возможная переносимость кода.

Похоже код, прийдется разделять и для потправки сообщений использовать API конкретной ОС (не обработку сообщений с помощью каких либо библиотек).

--------------------
Наносите пользу и причиняйте добро!
PM MAIL   Вверх
Ulysses4j
Дата 13.8.2008, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 6.6.2007
Где: Ростов-на-Дону

Репутация: 4
Всего: 10



Если спользовать API конкретной ОС, переносимости кода не будет, надо использовать API какой-либо библиотеки-обертки над API ОС.


--------------------
Communication is critical to the job of a programmer.
C. Jazdzewski. Fatherly Advice To New Programmers
PM MAIL WWW   Вверх
Gwendolen
Дата 13.8.2008, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 5.4.2005

Репутация: нет
Всего: 1



Цитата(Ulysses4j @  13.8.2008,  19:28 Найти цитируемый пост)
Если использовать API конкретной ОС, переносимости кода не будет, надо использовать API какой-либо библиотеки-обертки над API ОС.

А вот это как раз не желательно.

В принципе продолжение темы корректней продолжить здесь:
Обработка сообщений на Linux, Нужны API функции
--------------------
Наносите пользу и причиняйте добро!
PM MAIL   Вверх
andrew_121
Дата 15.8.2008, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Цитата(Gwendolen @  13.8.2008,  20:06 Найти цитируемый пост)
А вот это как раз не желательно.

Чё то я не врубаюсь. smile 
Похоже что автор сам еще не знает что ему нужно, или не знает нужно ли ему хоть что-то...
Ну понаблюдаем...
Я думаю автору статьи нужно написать абсолютно новую ОС. На которой будет API Windows, но на самом деле это Linux. Или наоборот.
Это единственное решение. smile 

Это сообщение отредактировал(а) andrew_121 - 15.8.2008, 01:55


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
bsa
Дата 17.8.2008, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(andrew_121 @ 15.8.2008,  01:44)
Я думаю автору статьи нужно написать абсолютно новую ОС. На которой будет API Windows, но на самом деле это Linux. Или наоборот.
Это единственное решение. smile

WINE - и ничего писать не нужно smile 
PM   Вверх
andrew_121
Дата 17.8.2008, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



bsa, Извращение какое-то smile 


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
jonie
Дата 17.8.2008, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



есть штука - очереди гарантированной доставки. они есть и кросплатформенные (IBM чета там).
не велосипеды, и дают ряд преимещуств.
почитайте книгу Шаблоны интеграции корпаративных приложений, там это описывается довольно неплохо....


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0886 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.