SchedulerListener
struct SchedulerListener;
void scheduler_add_listener(struct SchedulerListener* listener);
void scheduler_remove_listener(struct SchedulerListener* listener);
struct SchedulerListener : DoublyLinkedListLinkImpl<SchedulerListener> {
virtual ~SchedulerListener();
typedef DoublyLinkedList<SchedulerListener> SchedulerListenerList;
NotifySchedulerListeners(void (SchedulerListener::*hook)(Parameter1),
while (SchedulerListener* listener = it.Next())
void (SchedulerListener::*hook)(Parameter1, Parameter2),
while (SchedulerListener* listener = it.Next())
private SchedulerListener, private WaitObjectListener {
NotifySchedulerListeners(&SchedulerListener::ThreadEnqueuedInRunQueue,
NotifySchedulerListeners(&SchedulerListener::ThreadRemovedFromRunQueue,
NotifySchedulerListeners(&SchedulerListener::ThreadScheduled,
SchedulerListener::~SchedulerListener()
scheduler_add_listener(struct SchedulerListener* listener)
scheduler_remove_listener(struct SchedulerListener* listener)