Source Files
Public Interface
- Tcl_SetNotifier
- Tcl_CreateEventSource
- Tcl_DeleteEventSource
- Tcl_QueueEvent
- Tcl_ThreadQueueEvent
- Tcl_DeleteEvents
- Tcl_ServiceEvent
- Tcl_GetServiceMode
- Tcl_SetServiceMode
- Tcl_SetMaxBlockTime
- Tcl_DoOneEvent
- Tcl_ServiceAll
- Tcl_ThreadAlert
- Tcl_Sleep
Private Interface
- TclInitNotifier
- TclFinalizeNotifier
- TclMacOSXNotiferAddRunLoopMode
- TclUnixWaitForFile
Driver Interface
- Tcl_SetTimer
- Tcl_WaitForEvent
- Tcl_CreateFileHandler
- Tcl_DeleteFileHandler
- Tcl_InitNotifier
- Tcl_FinalizeNotifier
- Tcl_AlertNotifier
- Tcl_ServiceModeHook
Directly Depends On Public Interface
Directly Depends On Private Interface of
Discussion
The dependence on private aspect of Time Measurement is the direct access of the tclScaleTimeProcPtr which could be avoided by use of Tcl_QueryTimeProc.
The three modules Notifier, Asynchronous Events, and Timer Events appears to be an indivisible, interdependent collection.
The extension/customization feature provided by Tcl_SetNotifier has a very convoluted implementation. Refactoring to something more like that used by Tcl_SetTimeProc appears to be feasible, with only compatibility impacts on the Xt Based Notifier which I can find no evidence of being used by anyone for anything.
The default notifier on unix is founded on the select() system call. This implementation brings with it a limitation of FD_SETSIZE. Besides that, select() has a reputation of being an old choice, and many programmers are curious why more recent mechanisms are not used. Other candidates include poll() or libevent. It seems the way forward is to patch up any defects in Tcl_SetNotifier so that a notifier can be selected at program startup, and continue to supply the select implementation (for portability to weird places like routers) while also supplying whatever new notifiers make sense on respective platforms.