GTK:将函数调用委托给主线程
GTK: Delegate function call to main thread
我在将函数调用从工作线程委托给主线程时遇到了一些问题。由于我无法从工作线程调用 GTK,因此我想将此调用委托给主线程来为我完成。该函数应尽快在主线程上调用。
我尝试了以下方法:
g_idle_add(myfunc, myargs);
g_main_context_wakeup(NULL);
但是没用。 myfunc() 不会立即调用,而是仅在似乎触发主循环的其他输入到达时调用。我真的不明白为什么它不起作用。 g_main_context_wakeup() 不应该唤醒主循环吗?
我的主循环是这样的:
loop = g_main_loop_new(NULL, FALSE);
while(!quit) g_main_context_iteration(NULL, TRUE);
有什么想法吗?
为了回答我自己的问题,这没有用,因为我使用的是旧的 GTK 版本,它需要首先通过调用 g_thread_init() 显式启用多线程。一旦我调用 g_thread_init(),g_main_context_wakeup() 现在工作正常。
我在将函数调用从工作线程委托给主线程时遇到了一些问题。由于我无法从工作线程调用 GTK,因此我想将此调用委托给主线程来为我完成。该函数应尽快在主线程上调用。
我尝试了以下方法:
g_idle_add(myfunc, myargs);
g_main_context_wakeup(NULL);
但是没用。 myfunc() 不会立即调用,而是仅在似乎触发主循环的其他输入到达时调用。我真的不明白为什么它不起作用。 g_main_context_wakeup() 不应该唤醒主循环吗?
我的主循环是这样的:
loop = g_main_loop_new(NULL, FALSE);
while(!quit) g_main_context_iteration(NULL, TRUE);
有什么想法吗?
为了回答我自己的问题,这没有用,因为我使用的是旧的 GTK 版本,它需要首先通过调用 g_thread_init() 显式启用多线程。一旦我调用 g_thread_init(),g_main_context_wakeup() 现在工作正常。