Я создаю простую заставку для OSX и хочу создать поток для некоторых фоновых вычислений.OSX: Создание потока в заставке
Я нашел эту функцию здесь в SO, который будет создавать поток через Х секунд:
func backgroundThread(delay: Double = 0.0, background: (() -> Void)? = nil, completion: (() -> Void)? = nil) {
dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_USER_INITIATED.rawValue), 0)) {
if(background != nil){ background!(); }
let popTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC)))
dispatch_after(popTime, dispatch_get_main_queue()) {
if(completion != nil){ completion!(); }
}
}
}
Но это, кажется, не работает, когда я добавляю его в init
:
override init?(frame: NSRect, isPreview: Bool) {
super.init(frame: frame, isPreview: isPreview);
let fontSize: CGFloat = 20;
let frameHeight: CGFloat = self.frame.size.height;
let font = NSFont(name: "Times New Roman", size: fontSize);
let paragraph = NSMutableParagraphStyle.defaultParagraphStyle().mutableCopy() as! NSMutableParagraphStyle;
paragraph.alignment = NSTextAlignment.Center;
let textColor = NSColor(calibratedRed: 255.0, green: 255.0, blue: 255.0, alpha: 1.0);
self.backgroundThread(3.0, background: {
let w:String = "test";
let textRect: NSRect = NSMakeRect(1, (frameHeight-CGFloat(fontSize*CGFloat(1))-30), 80, 30);
if let actualFont = font {
let textFontAttributes = [
NSFontAttributeName: actualFont,
NSForegroundColorAttributeName: textColor,
NSParagraphStyleAttributeName: paragraph
];
w.drawInRect(NSOffsetRect(textRect, 0, 1), withAttributes: textFontAttributes);
}
});
}
It должен отображать эту строку через 3 секунды в другом потоке, но это не так. Что мне не хватает?