gpt4 book ai didi

c - 如何让 g_idle_add/g_timeout_add 运行的函数异步工作?

转载 作者:行者123 更新时间:2023-12-04 06:53:27 25 4
gpt4 key购买 nike

g_timeout_add (100, (GSourceFunc) read_next_packets, NULL);

由于上述声明,我可以感觉到 GUI 响应很慢。

我怎样才能让它异步工作,这样它就不会影响 GUI 响应?

最佳答案

这些函数的回调在主线程中调用。如 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com