-
-
Notifications
You must be signed in to change notification settings - Fork 5
/
IceCream_BackgroundWorker.swift.patch
48 lines (44 loc) · 1.52 KB
/
IceCream_BackgroundWorker.swift.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
--- BackgroundWorker.swift.orig 2021-02-10 22:50:58.000000000 +0900
+++ BackgroundWorker.swift 2021-02-13 20:27:44.000000000 +0900
@@ -16,10 +16,13 @@ class BackgroundWorker: NSObject {
static let shared = BackgroundWorker()
private var thread: Thread?
- private var block: (() -> Void)?
+ private var block:[(() -> Void)] = []
+ private let lockObject = NSLock()
func start(_ block: @escaping () -> Void) {
- self.block = block
+ lockObject.lock()
+ self.block.append(block)
+ lockObject.unlock()
if thread == nil {
thread = Thread { [weak self] in
@@ -28,9 +31,15 @@ class BackgroundWorker: NSObject {
return
}
while (!th.isCancelled) {
+ let t1 = Date()
RunLoop.current.run(
mode: .default,
before: Date.distantFuture)
+ let t2 = Date()
+ let delta = t2.timeIntervalSince(t1)
+ if delta < 0.01 {
+ Thread.sleep(forTimeInterval: 0.02)
+ }
}
Thread.exit()
}
@@ -52,6 +61,12 @@ class BackgroundWorker: NSObject {
}
@objc private func runBlock() {
- block?()
+ lockObject.lock()
+ let blockArray = block
+ block.removeAll()
+ lockObject.unlock()
+ for block in blockArray {
+ block()
+ }
}
}