I have an app which takes snapshots of the screen using a Timer. After some time, my iMac simply logs me out - I suspect because it has run out of resources for more threads. It seems to be making a new CVDisplayLink thread on each pass and never releasing it. How can I avoid this?
let _ = Timer.scheduledTimer(withTimeInterval: scrapeTime, repeats: true) { t in
Task {
let image = await self.scrape()
// do more stuff here
}
}
func scrape() async -> NSImage? {
guard let win = view.window else { return nil }
do {
let screenHeight = win.screen!.frame.height
var fr = win.frame
fr.origin.y = screenHeight - fr.height - fr.origin.y
scrapedCGImage = try await SCScreenshotManager.captureImage(in: fr)
return NSImage(cgImage: scrapedCGImage!, size: win.frame.size)
} catch {
print("Error capturing window image: \\(error)")
}
return nil
}