использование потоков и pyGST в приложении wx python - PullRequest
0 голосов
/ 02 мая 2009

ОК, поэтому я пишу приложение, которое воспроизводит музыку с привязками pyGST.

Это требует использования потоков для обработки воспроизведения. Библиотека привязок обрабатывает большую часть управления потоками для меня, что приятно (и то, что я искал в них).

Теперь я не совсем разбираюсь в этой концепции, поэтому я бы с нетерпением ждал некоторых ссылок. Но, насколько я понимаю, я должен сообщить приложению, что оно может использовать несколько потоков.

Я взял это из примеров на сайте gstreamer, где они используют этот вызов:

gtk.gdk.threads_init()  
gtk.main()

в соответствии с здесь , это говорит о том, что приложение может использовать несколько потоков (более или менее), отсюда и моё предположение.

Это фон. Теперь возьми это. Я поместил эти строки в мой код, и они работают нормально. Мое приложение воспроизводит музыку, а не падает, когда пытается. Но что-то не так.
В примерах, из которых я получил эти строки, они используют gtk для всего графического интерфейса, но я хочу использовать wxWidgets, поэтому неправильно вызывать эту функцию gtk для этого.

Есть ли эквивалент wx этому? или это нормально использовать, и он все еще будет работать кроссплатформенно?

Кроме того, я должен выяснить, как убить все эти потоки при выходе (чего он сейчас не делает). Я вижу, как они делают это в примере, снова используя метод gtk, и снова, ища эквивалент wx. ,

PS: я думаю, что это (или решение) может быть связано с функцией wx.App.MainLoop (), но я теряюсь, пытаясь понять, как работает этот цикл, поэтому, опять же, хорошие ссылки по этому поводу были бы оценены , но я полагаю, что нет необходимости, если у меня есть хорошее решение.

Ответы [ 3 ]

1 голос
/ 10 мая 2009

Попробуйте использовать это вместо:

import gobject
gobject.threads_init()

Интересно, почему это не написано крупным шрифтом в начале каждой документации к плагину Python gstreamer: мне понадобилось всего несколько часов, чтобы найти ее.

Немного подробнее здесь .

0 голосов
/ 05 мая 2009

У меня нет опыта работы с привязками python, но я успешно использовал wxWidgets и GStreamer вместе в Windows. Проблема в том, что wxWidgets запускает цикл событий Windows, а GStreamer использует цикл событий GLib. Если вас не волнует какое-либо из событий GStreamer, вам не нужно ничего делать. Однако, если вы хотите получить какое-либо из событий GStreamer, вам придется запустить свой собственный цикл событий GLib (GMainLoop) в отдельном потоке с отдельным GMainContext. Используйте gst_bus_create_watch для создания источника событий GST, добавьте обратный вызов к источнику с помощью g_source_set_callback, а затем присоедините его к основному контексту цикла событий GLib с помощью g_source_attach. Затем вы можете обработать GST в обратном вызове, например, чтобы переслать события в основной цикл событий wx.

0 голосов
/ 04 мая 2009

У меня нет опыта работы с pyGST, но общий совет по использованию потоков и wxPython - обновлять GUI только из основного потока (то есть потока, который запускает MainLoop). См. http://wiki.wxpython.org/LongRunningTasks для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...