1 ! Copyright (C) 2008 Slava Pestov
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien.syntax kernel threads init namespaces alien
4 core-foundation calendar ;
5 IN: core-foundation.run-loop
7 : kCFRunLoopRunFinished 1 ; inline
8 : kCFRunLoopRunStopped 2 ; inline
9 : kCFRunLoopRunTimedOut 3 ; inline
10 : kCFRunLoopRunHandledSource 4 ; inline
12 TYPEDEF: void* CFRunLoopRef
13 TYPEDEF: void* CFRunLoopSourceRef
15 FUNCTION: CFRunLoopRef CFRunLoopGetMain ( ) ;
16 FUNCTION: CFRunLoopRef CFRunLoopGetCurrent ( ) ;
18 FUNCTION: SInt32 CFRunLoopRunInMode (
20 CFTimeInterval seconds,
21 Boolean returnAfterSourceHandled
24 FUNCTION: CFRunLoopSourceRef CFFileDescriptorCreateRunLoopSource (
25 CFAllocatorRef allocator,
26 CFFileDescriptorRef f,
30 FUNCTION: void CFRunLoopAddSource (
32 CFRunLoopSourceRef source,
36 : CFRunLoopDefaultMode ( -- alien )
37 #! Ugly, but we don't have static NSStrings
38 \ CFRunLoopDefaultMode get-global dup expired? [
40 "kCFRunLoopDefaultMode" <CFString>
41 dup \ CFRunLoopDefaultMode set-global
44 : run-loop-thread ( -- )
45 CFRunLoopDefaultMode 0 f CFRunLoopRunInMode
46 kCFRunLoopRunHandledSource = [ 1 seconds sleep ] unless
49 : start-run-loop-thread ( -- )
50 [ run-loop-thread t ] "CFRunLoop dispatcher" spawn-server drop ;