Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [GTK+] Как разделить интерфейс и логику?? 
:(
    Опции темы
shutffl
Дата 12.3.2010, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Доброго времени суток!!

Подскажите, кто знает, как можно разделить логику программы и графический интерфейс (GTK+)?? Со своими тестами уже совсем до примитива дошел: две кнопки на форме для запуска и остановки.. Программа будет использоваться как в Linux, так и в Windows..

Итак, что конкретно я пытаюсь сделать: по нажатию на кнопку должна вызываться функция, например, запускающая некий расчет (грубый пример), но при этом окно программы не должно повисать.. То есть нажимаем на кнопку "Старт" - запускаем функцию, нажимаем на "Стоп" - и функция прерывается.. Можно было бы сделать простой fork(), но на Windows его, вроде, нет..

Сейчас пробую копать в сторону GThread, но пока ничего путного не получилось.. Запуск происходит, но потом прога вылетает при попытке провести мышкой над формой.. Ошибка вида g_context_*.. То есть пытаюсь реализовать вариант двух потоков: один для интерфейса, а второй для этой функции.. Для объектов интерфейса используется структура, в которой объявлен указатель на структуру из другого хедера.. Инициализация и прочие тонкости работают "на ура".. А вот добиться параллельной работы никак не могу..

Заранее спасибо!!
--------------------
shadowmoon
PM MAIL   Вверх
borisbn
Дата 13.3.2010, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



C++ интереснее, чем Русский. Выложи код


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
shutffl
Дата 13.3.2010, 02:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Было бы что выкладывать.. В коде вообще ничего нет, кроме как инициализации формы с GtkBuilder и тремя сигналами.. Меня интересует теория.. Проект переписываю из соображения "веры".. До этого он был написан на Qt и никаких проблем не было.. Разве что Qt слишком много скрывает в себе.. А я предпочитаю понимать код, который пишу..

Каким образом (с теоретической точки зрения) можно написать программу (с использованием GTK+), чтобы две задачи работали параллельно и не висло окно?? И возможно ли вообще?? Я начал копать в сторону потоков (благо есть pthread-win32), но пока не смог добиться ничего стоящего.. Поэтому и обратился за помощью..

P.S. Правила хорошего тона (а-ля кусочки кода) я знаю, но выкладывать действительно нечего.. Тут скорее реальная проблема с теоретическими знаниями, к сожалению..
--------------------
shadowmoon
PM MAIL   Вверх
SABROG
Дата 13.3.2010, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Цитата(shutffl @  13.3.2010,  02:51 Найти цитируемый пост)
Проект переписываю из соображения "веры".. До этого он был написан на Qt и никаких проблем не было.. Разве что Qt слишком много скрывает в себе.. А я предпочитаю понимать код, который пишу..

В чем заключается Ваша вера? Что Qt скрывает такого, чего нельзя посмотреть в её исходниках? Какой именно код Вы не понимаете, можно пример?


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


Опытный
**


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

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



Цитата(shutffl @  13.3.2010,  02:51 Найти цитируемый пост)
Разве что Qt слишком много скрывает в себе.. А я предпочитаю понимать код, который пишу.

Я бы не сказал, что в Qt слишком много скрыто, что ни до чего не догадаться. Там открытые исходники. Несколько раз приходилось обходить ошибки в Qt, именно копаясь в исходниках и узнавая, как возникла та или иная ситуация. И вызывая функции, подавляющие проявление глюка.


--------------------
всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23).
PM MAIL WWW   Вверх
SABROG
Дата 13.3.2010, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Давайте не будем устраивать священные войны, в этом разделе и так большинство тем про Qt. Я не собираюсь ни в чем переубеждать человека, мне интересно что его сподвигло сделать такой странный, на мой взгляд, переход от Qt к Gtk+. Неужели сложность в освоении?


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


Бывалый
*


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

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



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

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

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


 




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


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

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