Tag: glib

gst_bus_add_watch()和g_signal_connect()之间的区别

我正在阅读GStreamer应用程序开发人员手册,该手册在消息处理/事件处理的上下文中讨论管道总线,他们讨论了两个函数:gst_bus_add_watch()和g_signal_connect()。 看来这两个function是可以互换的。 应用手册说: 请注意,如果您使用的是默认的GLib主循环集成,则可以连接到总线上的“消息”信号,而不是连接手表。 在第27页。这两个函数之间有什么区别,它们在哪些上下文中有用? 谁使用我们在这些函数中注册的回调? 元素本身是否会调用回调?

glib gunichar和wchar_t之间有什么区别,哪个更适合跨平台解决方案?

我正在尝试编写一些只在用户拥有gcc可移植的C代码,并安装了glib 。 从我的所有研究中,我发现使用gcc , wchar_t总是被定义为4个字节,而使用glib , gunichar也是4个字节。 我没想到的是,如果像gunichar , wchar_t也被编码为UCS4。 是这样的吗? 如果是这样,我应该能够简单地将gunichar*转换为wchar_t*并使用stdc wcs*函数,对吧?

如何找到给定GArray的长度?

我有一个Grray的GValue(全部为非零),它已在运行时使用g_array_append_val分配。 我想知道如何找出最后一个元素的索引是什么,或者更确切地说是数组所包​​含的元素数量。 代码就像 for (length=0;g_value_get_int(&g_array_index(array, GValue, length)); length++); return length 会因为出界而失败。

Vala vapi文件文档

我想使用Vala破解现有的基于GLib的C项目。 基本上我正在做的是,在我的构建过程开始时,使用valac从我的.vala文件生成.c和.h文件,然后按照我任何.c或.h文件的方式编译生成的文件。 这可能不是最好的方式,但似乎在大多数情况下工作正常。 我的问题是我很难从Vala代码访问现有的C代码。 是否有捷径可寻? 我已经尝试编写自己的.vapi文件(我对vala附带的工具没有任何好运),但我找不到任何关于如何编写这些文件的体面文档。 有没有? 我是否需要其中一个文件来调用现有的C代码?

如何删除gcc 4.6中的警告:缺少初始化程序?

代码: GValue value = { 0 }; 发出以下警告: 缺少初始值设定项[-Wmissing-field-initializers] 我知道这是一个gcc’s BUG ; 但有一些技巧可以删除它吗? 真的不太好看到这种不真实的警告。 但是我不希望断电警告,因为它也会隐藏我的真实警告。 很抱歉,但我无法将我的gcc更新为4.7(看起来它已修复)版本。

可以运行多个主循环?

我正在使用libfuse和glib事件接口,我遇到了一个需要同时运行多个主循环的问题(glib的g_main_loop_run和fuse_loop_mt )。 我已经尝试在辅助上下文下为glib的事件循环创建一个分离的线程,例如: static void * event_loop(void *arg) { GMainLoop *event_loop; GMainContext *context; context = g_main_context_new(); g_main_context_push_thread_default(context); event_loop = g_main_loop_new(context, FALSE); g_main_loop_run(event_loop); return NULL; } … pthread_t event_thread; pthread_attr_t thread_attr; pthread_attr_init(&thread_attr); pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED); event_thread = pthread_create(&event_thread, &thread_attr, event_loop, NULL); 但是,glib事件循环不会接收任何触发的事件。 我在这里完全偏离基地吗? 解决多个主循环的正确方法是什么?

运行多个并发GMainLoops

是否允许GLib用户在多个线程中同时运行多个GMainLoop实例,每个线程都运行自己的实例? 我发现整个地方都有“是”和“否”的答案。 我意识到之前在这个论坛(2011年12月)已经提出了这个问题。 但是,我能够在没有明显问题的情况下同时运行两个GMainLoop实例。 我的测试代码非常简单: 在main()创建一个GMainLoop 使用g_timeout_add为默认上下文和主循环创建超时源 在main()中创建一个GThread 使用g_main_loop_run运行主循环 [THREAD CONTEXT]:使用g_main_context_new创建上下文 [THREAD CONTEXT]:使用g_main_context_push_thread_default将该上下文设置为线程默认值 [THREAD CONTEXT]:使用g_main_loop_new创建一个循环并g_main_loop_new提供新的上下文 [THREAD CONTEXT]:创建超时源,并通过g_source_attach将其附加到新上下文。 [THREAD_CONTEXT]:让线程调用g_main_loop_run 这样做,我看到GMainLoop两个实例GMainLoop运行得很好。 正确调用超时回调,稍后对g_main_loop_quit的调用按预期工作。 因此,让多个GMainLoop实例同时工作似乎不是问题。 但也许我只是没有充分运用API来完全掌握这种情况。 这个问题有明确的答案吗? 另外,如果有人关心的话,这是实际的测试代码: #define THREAD_TIMEOUTS (20) #define MAIN_TIMEOUS (1) typedef struct timeout_struct { int i; int max; GMainLoop *loop; char *name; } TIMEOUT_STRUCT; gboolean timeout_callback(gpointer data) { TIMEOUT_STRUCT *psTimeout = (TIMEOUT_STRUCT *)data; psTimeout->i++; if […]

被调用函数中的glib列表是否需要释放以释放内存

我有一个简单的程序,使用glib列表,我有一个函数,将列表返回给调用函数 在被调用的函数中,我已经删除了另一个列表,并将列表返回给调用函数。 我已经释放了main函数中的列表,但是在delimma中是否需要释放被调用函数中的列表以获得内存性能。 #include #include #include char *col_trim_whitespace(char *str) { char *end; // Trim leading space while(isspace(*str)) str++; if(*str == 0) // All spaces? return str; // Trim trailing space end = str + strlen(str) – 1; while(end > str && isspace(*end)) end–; // Write new null terminator *(end+1) = 0; return str; } GSList* […]

带有Quartz的GTK窗口

我正在尝试使用GStreamer SDK的basic-tutorial-5来处理OSX。 SDK从http://gstreamer.freedesktop.org/data/pkg/osx/1.2.4.1/下载 来自http://cgit.freedesktop.org/~slomo/gst-sdk-tutorials/的教程(适用于1.0) 我收到以下错误 basic-tutorial-5.c:5:10: fatal error: ‘gst/video/videooverlay.h’ file not found 我跑的时候 gcc `pkg-config gstreamer-1.0 gtk+-3.0 –cflags –libs` basic-tutorial-5.c -o basic5 任何指针都会有所帮助! 谢谢。 编辑: gst/video/videooverlay.h中有一个gst/video/videooverlay.h /local/frameworks/Gstreamer.framework/Headers 。 pkg-config gstreamer-1.0 gtk+-3.0 –cflags –libs不包括/Library/Frameworks/Gstreamer.framework/Versions/1.0/Headers 感谢@Biffen使用时 gcc `pkg-config –cflags –libs gtk+-3.0` -o basic5 basic-tutorial-5.c -I/Library/Frameworks/Gstreamer.framework/Versions/1.0/Headers -framework GStreamer 还有一点动作: basic-tutorial-5.c:114:17: warning: ‘gtk_button_new_from_stock’ is deprecated [-Wdeprecated-declarations] play_button = gtk_button_new_from_stock […]

为什么GLib重新定义类型?

在GLib中重新定义类型背后的原因是什么? 为什么他们把char变成gchar , int变成gint等等?