作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
g_timeout_add (100, (GSourceFunc) read_next_packets, NULL);
最佳答案
这些函数的回调在主线程中调用。如 read_next_packets
慢或阻塞 I/O,您应该为它创建一个单独的线程,它不会干扰 GUI。当该线程需要通知主线程某事时,它可以使用 g_idle_add
将执行转移到主线程范围。
在伪代码中:
// In a dedicated thread:
while (...) {
Package* package = do_read (); // This call is slow or blocks.
if (package)
g_idle_add ((GSourceFunc) process_package, package);
}
// This is called in the main thread. Should be fast to not freeze GUI.
gboolean
process_package (Package* package)
{
...
package_free (package);
}
关于c - 如何让 g_idle_add/g_timeout_add 运行的函数异步工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2797179/
我正在尝试使用 g_idle_add()具有需要多个参数的函数。我可以通过某种方式内联传递它们还是必须为此创建一个结构? 主要目标是减少内存消耗,其他都是次要的。 static gboolean ch
g_timeout_add (100, (GSourceFunc) read_next_packets, NULL); 由于上述声明,我可以感觉到 GUI 响应很慢。 我怎样才能让它异步工作,这样它就
我需要在 C++ 代码中使用 g_idle_add(),其中 GSourceFunc 是另一个类函数并且还必须传递一些参数.仅在 C 代码中看到它的使用。所以可能是我没有把事情做好 虽然在 C 代码中
我是一名优秀的程序员,十分优秀!