LINUX.ORG.RU

c++, gtk, gtk_main()


0

0

Добрый вечер. Ситуация:
Есть 2 класса: 1 отвечает за отрисовку splash-экрана(вывод окошка с сообщениями "Инициализируем то-то"..). Второй отвечает за отрисовку базового окна программы.

Вопрос: для того, чтобы splash-screen был виден, сделав gtk_show_all() я должен вызвать gtk_main(). Без нее GUI отображаться на экране не хочет. Но и для Базового окна также нужен вызов gtk_main.. Но главный цикл GUI(за который и отвечает gtk_main) должен быть един.

Тут(http://www.gtkforums.com/viewtopic.php?t=1298) есть обсуждение, но ни слова о main-цикле обработки сообщений gtk

anonymous

Анонимус не осилил посмотреть в devhelp?

Запускаешь свой сплешскрин, инициализируй базовое окно программы, врубай мейнлуп

Пусть твоё базовое окно в процессе инициализации обновляет надписи на сплешскрине а в промежутках вставляет

while( gtk_events_pending()) gtk_main_iteration();

Второй вариант - замутить поток.

mint
()

> для того, чтобы splash-screen был виден, сделав gtk_show_all() я должен вызвать gtk_main(). Без нее GUI отображаться на экране не хочет. Но и для Базового окна также нужен вызов gtk_main.. Но главный цикл GUI(за который и отвечает gtk_main) должен быть един

Есть несколько вариантов:
- вызывать gtk_main один раз в самом начале;
- вызывать gtk_main один раз после первого gtk_show_all;
- вызывать gtk_main по очереди;
- вызывать gtk_main как угодно и где угодно.

Подозреваю, что ты не осилил вещь под названием "The Main Event Loop" и поэтому задаешь такие банальные вопросы.

ShprotX
()
Ответ на: комментарий от fukazzz

> Я - за 2 потока. После инициализации splash-скрина просто убить его thread и всё будет красиво

GTK+ немногопоточно by-design. В данном случае я не вижу разницы между одним и двумя потоками, кроме лишнего гемора с многопоточностью.
Ах да, кого убивать будем? Окно - это ведь не поток, и не потоком единым живет. Грубо говоря, там либо убивать будет нечего, либо я не отвечаю за последствия.
А вообще, в данном случае fukazzz - мудак.

ShprotX
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.