结构
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在
prepare或check函数中返回TRUE,或达到就绪时间后,调用来调度事件源。dispatch函数接收回调函数和用户数据。如果源从未使用g_source_set_callback()连接到回调,则回调函数可能是NULL。dispatch函数应使用user_data以及此类事件源所需的任何其他参数调用回调函数。dispatch函数的返回值应为G_SOURCE_REMOVE(如果应删除源)或G_SOURCE_CONTINUE(如果要保留源)。finalize当源完成时调用。此时,源将被销毁、清除其回调并从其
GMainContext中移除,但仍将保留其最终引用计数,因此可以在此函数中对其调用方法。