mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2026-01-29 15:30:05 +00:00
no message
This commit is contained in:
@@ -38,8 +38,12 @@ public final class Queue {
|
||||
self.specialIsMainQueue = specialIsMainQueue
|
||||
}
|
||||
|
||||
public init() {
|
||||
self.nativeQueue = dispatch_queue_create(nil, DISPATCH_QUEUE_SERIAL)
|
||||
public init(name: String? = nil) {
|
||||
if let name = name {
|
||||
self.nativeQueue = dispatch_queue_create(name, DISPATCH_QUEUE_SERIAL)
|
||||
} else {
|
||||
self.nativeQueue = dispatch_queue_create(nil, DISPATCH_QUEUE_SERIAL)
|
||||
}
|
||||
self.specific = nil
|
||||
self.specialIsMainQueue = false
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@ public func recurse<T, E>(latestValue: T?)(signal: Signal<T, E>) -> Signal<T, E>
|
||||
}
|
||||
}
|
||||
|
||||
public func retry<T, E>(exponentialDecay: Double, onQueue queue: Queue)(signal: Signal<T, E>) -> Signal<T, E> {
|
||||
public func retry<T, E>(delayIncrement: Double, maxDelay: Double, onQueue queue: Queue)(signal: Signal<T, E>) -> Signal<T, NoError> {
|
||||
return Signal { subscriber in
|
||||
let shouldRetry = Atomic(value: true)
|
||||
let currentDelay = Atomic(value: 0.0)
|
||||
@@ -105,7 +105,7 @@ public func retry<T, E>(exponentialDecay: Double, onQueue queue: Queue)(signal:
|
||||
subscriber.putNext(next)
|
||||
}, error: { error in
|
||||
let delay = currentDelay.modify { value in
|
||||
return value
|
||||
return min(maxDelay, value + delayIncrement)
|
||||
}
|
||||
|
||||
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC)))
|
||||
|
||||
@@ -25,3 +25,17 @@ public func take<T, E>(count: Int)(signal: Signal<T, E>) -> Signal<T, E> {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
public func last<T, E>(signal: Signal<T, E>) -> Signal<T?, E> {
|
||||
return Signal { subscriber in
|
||||
let value = Atomic<T?>(value: nil)
|
||||
return signal.start(next: { next in
|
||||
value.swap(next)
|
||||
}, error: { error in
|
||||
subscriber.putError(error)
|
||||
}, completed: { completed in
|
||||
subscriber.putNext(value.with({ $0 }))
|
||||
subscriber.putCompletion()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ public func ==(lhs: ThreadPoolQueue, rhs: ThreadPoolQueue) -> Bool {
|
||||
private var mutex: pthread_mutex_t
|
||||
private var condition: pthread_cond_t
|
||||
|
||||
private class func threadEntryPoint(threadPool: ThreadPool) {
|
||||
@objc class func threadEntryPoint(threadPool: ThreadPool) {
|
||||
var queue: ThreadPoolQueue!
|
||||
|
||||
while (true) {
|
||||
@@ -107,7 +107,9 @@ public func ==(lhs: ThreadPoolQueue, rhs: ThreadPoolQueue) -> Bool {
|
||||
pthread_mutex_unlock(&threadPool.mutex);
|
||||
|
||||
if task != nil {
|
||||
task.execute()
|
||||
autoreleasepool {
|
||||
task.execute()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -123,7 +125,7 @@ public func ==(lhs: ThreadPoolQueue, rhs: ThreadPoolQueue) -> Bool {
|
||||
super.init()
|
||||
|
||||
for _ in 0 ..< threadCount {
|
||||
let thread = NSThread(target: ThreadPool.self, selector: Selector("threadEntryPoint"), object: self)
|
||||
let thread = NSThread(target: ThreadPool.self, selector: Selector("threadEntryPoint:"), object: self)
|
||||
thread.threadPriority = threadPriority
|
||||
self.threads.append(thread)
|
||||
thread.start()
|
||||
@@ -153,4 +155,14 @@ public func ==(lhs: ThreadPoolQueue, rhs: ThreadPoolQueue) -> Bool {
|
||||
public func nextQueue() -> ThreadPoolQueue {
|
||||
return ThreadPoolQueue(threadPool: self)
|
||||
}
|
||||
|
||||
public func isCurrentThreadInPool() -> Bool {
|
||||
let currentThread = NSThread.currentThread()
|
||||
for thread in self.threads {
|
||||
if currentThread.isEqual(thread) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user