On Mar 11, 2009, at 2:42 AM, Ken Thomases wrote:
All irrelevant, as there's no need for any signaling of any run loop
input sources to allow timers to fire.
And the best source is the source:
http://www.opensource.apple.com/darwinsource/10.5.6/CF-476.17/CFRunLoop.c
static void __CFRunLoopTimerSchedule(CFRunLoopTimerRef rlt,
CFRunLoopRef rl, CFRunLoopModeRef rlm) {
#if DEPLOYMENT_TARGET_MACOSX
__CFRunLoopTimerLock(rlt);
if (0 == rlt->_rlCount) {
rlt->_runLoop = rl;
if (MACH_PORT_NULL == rlt->_port) {
rlt->_port = mk_timer_create();
}
__CFRunLoopTimerPortMapLock();
if (NULL == __CFRLTPortMap) {
__CFRLTPortMap =
CFDictionaryCreateMutable(kCFAllocatorSystemDefault, 0, NULL, NULL);
}
CFDictionarySetValue(__CFRLTPortMap, (void *)(uintptr_t)rlt->_port,
rlt);
__CFRunLoopTimerPortMapUnlock();
}
rlt->_rlCount++;
mach_port_insert_member(mach_task_self(), rlt->_port, rlm-
>_portSet);
mk_timer_arm(rlt->_port, __CFUInt64ToAbsoluteTime(rlt->_fireTSR));
__CFRunLoopTimerUnlock(rlt);
#endif
}
mach timers are blocked for in the subsequent CFRunLoopRun:
/* In that sleep of death what nightmares may come ... */
try_receive:
msg->msgh_bits = 0;
msg->msgh_local_port = waitSet;
msg->msgh_remote_port = MACH_PORT_NULL;
msg->msgh_id = 0;
ret = mach_msg(msg, MACH_RCV_MSG|MACH_RCV_LARGE|(poll ?
MACH_RCV_TIMEOUT : 0)|MACH_RCV_TRAILER_TYPE(MACH_MSG_TRAILER_FORMAT_0)|
MACH_RCV_TRAILER_ELEMENTS(MACH_RCV_TRAILER_AUDIT), 0, msg->msgh_size,
waitSet, 0, MACH_PORT_NULL);
Cheers,
M
_______________________________________________
Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to arch...@mail-archive.com