好的,所以我正在编写一个应用程序,它用pyGST绑定播放音乐。
这需要使用线程来处理回放。绑定库为我处理大部分线程控件,这很好(以及我在它们中寻找的内容)。
现在,我还没有完全掌握这个概念,所以我很想得到一些参考。但据我所知,我必须告诉这个应用程序它可以使用多个线程。
我从gstreamer站点上的示例中收集到了这些信息,他们在那里使用这个调用:
gtk.gdk.threads_init()
gtk.main()根据这里的说法,这告诉应用程序它可以使用多个线程(或多或少),这就是我上述假设的来源。
这就是背景。现在拿着这个。我已经将这些行放在我的代码中,它们工作得很好。我的应用程序播放音乐,而不是一试就崩溃。但有些事感觉不对劲。
在我获得这些行的示例中,它们对整个GUI使用gtk,但我想使用wxWidgets,因此调用这个gtk函数这样做是错误的。
是否有一个与此等价的wx?还是可以使用它,并且它仍然可以跨平台工作?
此外,我还必须弄清楚如何在exit上杀死所有这些线程(它现在不这么做)--我再次在示例中看到了它们是如何使用gtk方法的,因此,再次寻找一个wx等效的线程。
PS:我认为这个(或解决方案)可能与wx.App.MainLoop()函数有关,但是我无法理解这个循环是如何工作的,因此,如果我有一个好的解决方案,那么关于这个循环的好参考就会很感激。
发布于 2009-05-10 10:57:20
试着用这个代替:
import gobject
gobject.threads_init()我想知道为什么在每个python插件文档的开头,它都不是用大写形式写成的:我只花了几个小时就找到了它。
更多细节,这里。
发布于 2009-05-04 09:07:45
我对pyGST没有经验,但是关于使用线程和wxPython的一般建议是只从主线程(即启动MainLoop的线程)更新GUI。有关详细信息,请参阅http://wiki.wxpython.org/LongRunningTasks。
发布于 2009-05-05 02:06:49
我没有使用python绑定的经验,但我在Windows上成功地使用了wxWidgets和GStreamer。问题是,wxWidgets运行Windows循环,而GStreamer使用GLib事件循环。如果您不关心任何GStreamer事件,就不需要做任何事情。但是,如果您想接收任何GStreamer事件,则必须在一个单独的线程中运行您自己的GLib事件循环(GMainLoop),该线程具有一个单独的GMainContext。使用gst_bus_create_watch创建GST事件源,使用g_source_set_callback向源添加一个回调,然后将其附加到GLib事件循环的主上下文中,并使用g_source_attach。然后,您可以在回调中处理GST,例如,将事件转发到wx主事件循环。
https://stackoverflow.com/questions/815255
复制相似问题