请注意,我使用的是 Python,但这可能适用于 glib 中的任何其他绑定。
glib.io_add_watch()我有一个类,通过一个名为 的回调方法设置多个套接字连接foo()。此外,我还有一个glib.idle_add()名为 的方法的回调bar()。 foo()创建或更新元素列表(类成员),元素可以是任何值,包括 None。 bar()从上面的列表中删除任何 None 项目——我们已经完成了这些,我们不再关心。实际上,它清理了一切。
glib 是否允许每个线程在任意时间仅调用一个回调?
如果我要foo()在线程一和bar()线程二中运行此代码,则会出现竞争条件。我认为一个简单的互斥体可以解决这个问题,但是有没有更有效的方法来做到这一点?
我一直在分析一些 gtk 应用程序的代码,发现 .h 文件中有 G_BEGIN_DECLS 和 G_END_DECLS 宏。文档说
用于(与 G_END_DECLS 一起)将头文件括起来
但我不明白我的意思。
我读了关于 gobject 的维基百科页面,上面写着:
仅依赖于 GLib 和 libc,GObject 是 GNOME 的基石,并在 GTK、Pango、ATK 中使用
但是此GLib API 参考页在其依赖项中列出了 GObject,此GObject API 参考页在其依赖项中列出了 GLib
如果维基百科页面上的内容属实,那么它们之间的依赖关系如何?它不应该只存在于 GObject 的依赖项下而不是 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来生成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
我想执行异步文件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) 我正在使用glib 2.0框架.一段时间后,我的C程序输出此错误:
GLib-CRITICAL**:g_hash_table_foreach_remove_or_steal:断言`version == hash_table-> version'失败
任何人都可以告诉我这一般意味着什么吗?谷歌并没有真正帮助太多.谢谢
我正在尝试在我的程序中使用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世界,比如程序吗?
我很好奇gsettings是否可以用于存储对象,还是必须静态设置所有内容?诸如用户对象之类的对象可以存储在gsettings中吗?是否可以在每个用户上使用固定属性添加和删除用户?
我必须在Linux上为学校项目开发本机应用程序.我选择与GTK合作,我开始阅读官方指南.
GTK API本身很容易理解,但是我遇到了GObject和GLib的问题,它们很难学习,我不知道为什么它们习惯了.我应该学习GObject和GLib来使用GTK吗?
GObject官方文档是非常庞大的https://developer.gnome.org/gobject/stable/我需要几个星期才能学习GObject才能最终学习GTK.