结构
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
中移除,但仍将保留其最终引用计数,因此可以在此函数中对其调用方法。