Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [GTK+] Организовать взаимодействие потоков и формы, по аналогии SendMessage\PostMessage 
:(
    Опции темы
Voxifer
Дата 12.11.2009, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Начинаю потихоньку переходить с винды на Linux (в 100500-й раз, ага) и пытаюсь некоторые приемы адаптировать под изменившуюся для меня идеологию. Начал с изучения GTK+, как наиболее приближенной к программированию на WinAPI, на мой взгляд. Прошу небольшой помощи в адаптации.
В своих программах на винде я зачастую использую следующий прием:
1) при запуске приложения запускаются N потоков (возможно, различных, каждый может делать что-то своё), которым параметром передаётся хендл главного окна приложения.
2) Каждый поток при своей работе в момент срабатывания какого-нибудь условия шлет уникальное сообщение с помощью SendMessage\PostMessage.
3) Главная оконная функция приложения получает эти сообщения в порядке живой очереди и в соответствии с параметрами полученных сообщений отображает результаты работы потоков где-нибудь в GUI.

Вопрос, собственно, в следующем: как я понял, системы сообщений здесь нет, её де-факто подменяет система "событий". Как технически можно реализовать вышеприведенный мной приём? Ладно, пусть будет реализовано на событиях, но хотелось быть, чтобы каждому потоку сообщался общий идентификатор и по этому идентификатору поток мог "отсылать" данные, не заботясь об их дальнейшей судьбе.

P.S. Кстати, если у кого-нибудь есть ссылка на книжку по разработке GUI-приложений в GTK - был бы признателен.
PM MAIL   Вверх
Void
Дата 12.11.2009, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



В GLib есть асинхронные очереди (GAsyncQueue). Создать одну или несколько таких очередей, раздать потокам, будут добавлять «события» с помощью g_async_queue_push(). В main loop приложения добавить обработчик g_idle_add() и в нём выбирать сообщения g_async_queue_try_pop().


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Voxifer
Дата 12.11.2009, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Void, это очень ок... Направление примерно понял, через пару часов доберусь до дома - попробую, спасибо. 
Кстати, а есть где-нибудь описание того, что происходит внутри gtk_main()? Хотя бы на уровне псевдокода?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




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


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

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