【问题标题】:Proper program structure using g_main_loop使用 g_main_loop 的正确程序结构
【发布时间】:2023-01-25 13:50:25
【问题描述】:

我有一个应用程序需要使用回调函数,除非 glib g_main_loop 正在运行,否则回调函数不会触发。我对实现这个的“好”程序是什么样子,或者预期的程序流程是什么一无所知。我不觉得我所拥有的似乎是正确的,因为这种方法需要在每个异步函数之后循环,以等待响应。我想一定有某种方法可以在不阻塞的情况下产生 g_main_loop,但我不知道如何实现。

这是我必须实现的使用需要回调的函数的伪代码:


// declared globally so it can be started from main, stopped from callback.
GMainLoop *loop;

void callback_function(void)
{
  g_main_loop_quit(loop);
}

int main (void)
{
  func_which_requires_callback(callback_function);

  loop = g_main_loop_new();
  
  // loop will end when callback ends the loop

  return 0;
}


【问题讨论】:

  • 在事件驱动编程中,您无需等待。响应应该是触发稍后回调的新事件。

标签: c gtk glib


【解决方案1】:

您的伪代码非常正确。所有工作都在回调中完成,而主循环迭代。回调要么由异步操作或事件源(如g_idle_add())触发,要么是信号处理程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 2017-04-01
    • 2015-03-21
    • 2010-11-29
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多