no message

This commit is contained in:
Peter
2015-09-03 19:57:35 +03:00
parent cf3c020156
commit 3f52eefb17
4 changed files with 37 additions and 7 deletions

View File

@@ -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

View File

@@ -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)))

View File

@@ -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()
})
}
}

View File

@@ -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
}
}