结构

GLibSourceFuncs

描述 [src]

struct GSourceFuncs {
  GSourceFuncsPrepareFunc prepare;
  GSourceFuncsCheckFunc check;
  GSourceFuncsDispatchFunc dispatch;
  GSourceFuncsFinalizeFunc finalize;
}

GSourceFuncs 结构包含一个函数表,用于以通用方式处理事件源。

对于空闲源,prepare 和 check 函数始终返回 TRUE 以指示源始终准备就绪。prepare 函数还返回一个 0 超时值以确保 poll() 调用不会阻塞(因为这会浪费原本可用于运行空闲函数的时间)。

对于超时源,如果超时间隔已过期,prepare 和 check 函数都会返回 TRUE。prepare 函数还返回一个超时值,以确保 poll() 调用不会阻塞太长时间而错过下一次超时。

对于文件描述符源,prepare 函数通常返回 FALSE,因为它必须等到 poll() 被调用后才能知道是否需要处理任何事件。它将返回的超时设置为 -1,以指示它不介意 poll() 调用阻塞多久。在 check 函数中,它测试 poll() 调用的结果以查看是否满足所需条件,并在满足时返回 TRUE

结构成员
prepare

在轮询所有文件描述符之前调用。如果源可以确定它在此处已准备就绪(无需等待 poll() 调用结果),则应返回 TRUE。它还可以返回一个 timeout_ 值,该值应为传递给 poll() 调用的最大超时(以毫秒为单位)。实际使用的超时将为 -1(如果所有源都返回 -1),或将为所返回的且 >= 0 的所有 timeout_ 值的最小值。从 2.36 版开始,此参数可以为 NULL,在这种情况下,效果与函数始终返回带有 -1 超时的 FALSE 相同。如果 prepare 返回一个超时,并且源还设置了就绪时间,那么将使用这两个值中的较低值。

check

轮询所有文件描述符后调用。如果源已准备就绪,则应返回 TRUE。请注意,自上次调用 prepare 函数后可能已过了一段时间,因此应在此处再次检查源。从 2.36 版开始,此参数可以为 NULL,在这种情况下,效果与函数始终返回 FALSE 相同。

dispatch

preparecheck 函数中返回 TRUE,或达到就绪时间后,调用来调度事件源。dispatch 函数接收回调函数和用户数据。如果源从未使用 g_source_set_callback() 连接到回调,则回调函数可能是 NULLdispatch 函数应使用 user_data 以及此类事件源所需的任何其他参数调用回调函数。dispatch 函数的返回值应为 G_SOURCE_REMOVE(如果应删除源)或 G_SOURCE_CONTINUE(如果要保留源)。

finalize

当源完成时调用。此时,源将被销毁、清除其回调并从其 GMainContext 中移除,但仍将保留其最终引用计数,因此可以在此函数中对其调用方法。