Use CFRunLoopTimer instead of sleep()