标签: glib

glib 回调和线程安全

请注意,我使用的是 Python,但这可能适用于 glib 中的任何其他绑定。

glib.io_add_watch()我有一个类,通过一个名为 的回调方法设置多个套接字连接foo()。此外,我还有一个glib.idle_add()名为 的方法的回调bar()foo()创建或更新元素列表(类成员),元素可以是任何值,包括 None。 bar()从上面的列表中删除任何 None 项目——我们已经完成了这些,我们不再关心。实际上,它清理了一切。

glib 是否允许每个线程在任意时间仅调用一个回调?

如果我要foo()在线程一和bar()线程二中运行此代码,则会出现竞争条件。我认为一个简单的互斥体可以解决这个问题,但是有没有更有效的方法来做到这一点?

gtk pygtk glib thread-safety

3
推荐指数
1
解决办法
866
查看次数

G_BEGIN_DECLS 和 G_END_DECLS 有何用途?

我一直在分析一些 gtk 应用程序的代码,发现 .h 文件中有 G_BEGIN_DECLS 和 G_END_DECLS 宏。文档说

用于(与 G_END_DECLS 一起)将头文件括起来

但我不明白我的意思。

gtk glib gtk3

3
推荐指数
1
解决办法
2652
查看次数

gobject 依赖于 glib 还是 glib 依赖于 gobject?

我读了关于 gobject 的维基百科页面,上面写着:

仅依赖于 GLib 和 libc,GObject 是 GNOME 的基石,并在 GTK、Pango、ATK 中使用

但是此GLib API 参考页在其依赖项中列出了 GObject,此GObject API 参考页在其依赖项中列出了 GLib

如果维基百科页面上的内容属实,那么它们之间的依赖关系如何?它不应该只存在于 GObject 的依赖项下而不是 GLib 依赖项下吗?

我很困惑什么取决于什么,或者它们是否相互依赖?如果是,怎么办?

gtk dependencies gobject glib

3
推荐指数
1
解决办法
142
查看次数

在vala中哪里可以找到Glib对象?

我刚开始学习vala.我从vala教程中尝试了以下程序.

class Demo.Hello : Glib.Object
{
  public static int main( string[] args )
  {
    stdout.printf("Hello, Vala!\n");
    return 0;
  }
}
Run Code Online (Sandbox Code Playgroud)

当我编译时得到了这个.

$ valac hello.vala 
hello.vala:1.20-1.23: error: The symbol `Glib' could not be found
class Demo.Hello : Glib.Object
                   ^^^^
Compilation failed: 1 error(s), 0 warning(s)
[1]+  Done                    gvim hello.vala
Run Code Online (Sandbox Code Playgroud)

如果我Glib.从中删除Glib.Object即将其保留class Demo.Hello : Object,那么一切正常.但是教程中的所有程序都使用了Glib.Object.这有什么不对?我搜索了答案,却找不到答案.这是vala版本信息:

$ valac --version
Vala 0.5.2
Run Code Online (Sandbox Code Playgroud)

我正在运行最新版本的CentOS.

glib vala

2
推荐指数
2
解决办法
1106
查看次数

为什么我的SHA256总和不同?

我正在使用glib来生成SHA256校验和.它似乎工作正常,但当我使用sha256sum验证输出时,我得到了不同的结果.有什么想法发生了什么?

char* createChecksumString(const char* buffer) {
    //Create SHA256 checksum using glib
    gchar* checksum = g_compute_checksum_for_string(G_CHECKSUM_SHA256,
        buffer, -1);

    printf("%s\n", buffer);
    printf("%s\n", checksum);

    .
    .
    .
}

.
.
.

const char* msg = "Hello SHA256";
char* checksum = createChecksumString(msg);
Run Code Online (Sandbox Code Playgroud)

上面的代码产生:

你好SHA256

70725d0f78cb0967c0e5171f733619712d239e28f2d279e4b3c3ed97f7456fa3

sha256sum产生不同的输出.见下文:

echo"Hello SHA256"| sha256sum

e32bd03f46f51d4a5c903429fea1c31032d8d7aa689c764141b7cebd74f4e140

c checksum glib

2
推荐指数
1
解决办法
372
查看次数

在GIO中,为什么这些异步文件IO操作永远不会完成?(适用于C和Vala)

我想执行异步文件IO操作.这是我在Vala中尝试做的简化版本:

void main(string[] args) {
    store_async();

    while(true)
        ;
}

async void store_async() {
    File file = File.new_for_path("settings.ini");

    stderr.printf("Checking if file exists...\n");
    if (!file.query_exists()) {
        stderr.printf("About to yield file.create_async...\n");
        try {
            yield file.create_async(FileCreateFlags.REPLACE_DESTINATION);
        } catch (Error err) {
            error("Error creating file: %s\n", err.message);
        }
        stderr.printf("Returned from file.create_async.\n");
    }

    string data = "hello\n";
    string new_etag;
    stderr.printf("About to yield file.replace_contents_async...\n");
    try {
        yield file.replace_contents_async(
            data.data,
            null,
            false,
            FileCreateFlags.NONE,
            null,
            out new_etag);
    } catch (Error err) {
        error("Error replacing contents: %s\n", err.message);
    }

    stderr.printf("Returned …
Run Code Online (Sandbox Code Playgroud)

c asynchronous glib vala gio

2
推荐指数
1
解决办法
935
查看次数

无法理解Glib错误

我正在使用glib 2.0框架.一段时间后,我的C程序输出此错误:

GLib-CRITICAL**:g_hash_table_foreach_remove_or_steal:断言`version == hash_table-> version'失败

任何人都可以告诉我这一般意味着什么吗?谷歌并没有真正帮助太多.谢谢

c glib

2
推荐指数
1
解决办法
388
查看次数

libsoup客户端的简单示例

我正在尝试在我的程序中使用libsoup从Internet下载文件.我所需要的(当前)只是将url传递给libsoup并将文件下载到/ tmp /目录.

基本上我的程序看起来像:

Download d;
d.get("http://test.com/sample.mp3");
Run Code Online (Sandbox Code Playgroud)

我搜索了libsoup的简单例子,但没有运气,也许Soup Client Basics是一个好的开始,但我担心这对我来说并不是一个新的(滑稽的)首发.

任何人都可以使用libsoup客户端共享一个简单的hello世界,比如程序吗?

c c++ network-programming glib

2
推荐指数
1
解决办法
1544
查看次数

可以动态创建设置吗?

我很好奇gsettings是否可以用于存储对象,还是必须静态设置所有内容?诸如用户对象之类的对象可以存储在gsettings中吗?是否可以在每个用户上使用固定属性添加和删除用户?

linux gnome glib gio gsettings

2
推荐指数
1
解决办法
219
查看次数

我应该学习GObject和GLib来使用GTK吗?

我必须在Linux上为学校项目开发本机应用程序.我选择与GTK合作,我开始阅读官方指南.

GTK API本身很容易理解,但是我遇到了GObject和GLib的问题,它们很难学习,我不知道为什么它们习惯了.我应该学习GObject和GLib来使用GTK吗?

GObject官方文档是非常庞大的https://developer.gnome.org/gobject/stable/我需要几个星期才能学习GObject才能最终学习GTK.

gtk gobject glib

2
推荐指数
1
解决办法
435
查看次数