mirror of
https://github.com/ReactiveX/RxSwift.git
synced 2024-10-05 06:27:29 +03:00
47 lines
1.0 KiB
Swift
47 lines
1.0 KiB
Swift
//
|
|
// RunLoopLock.swift
|
|
// Rx
|
|
//
|
|
// Created by Krunoslav Zaher on 11/5/15.
|
|
// Copyright © 2015 Krunoslav Zaher. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
#if !RX_NO_MODULE
|
|
import RxSwift
|
|
#endif
|
|
|
|
class RunLoopLock : NSObject {
|
|
let currentRunLoop: CFRunLoopRef
|
|
|
|
override init() {
|
|
currentRunLoop = CFRunLoopGetCurrent()
|
|
}
|
|
|
|
func dispatch(action: () -> ()) {
|
|
CFRunLoopPerformBlock(currentRunLoop, kCFRunLoopDefaultMode) {
|
|
if CurrentThreadScheduler.isScheduleRequired {
|
|
CurrentThreadScheduler.instance.schedule(()) { _ in
|
|
action()
|
|
return NopDisposable.instance
|
|
}
|
|
}
|
|
else {
|
|
action()
|
|
}
|
|
}
|
|
CFRunLoopWakeUp(currentRunLoop)
|
|
}
|
|
|
|
func stop() {
|
|
CFRunLoopPerformBlock(currentRunLoop, kCFRunLoopDefaultMode) {
|
|
CFRunLoopStop(self.currentRunLoop)
|
|
}
|
|
CFRunLoopWakeUp(currentRunLoop)
|
|
}
|
|
|
|
func run() {
|
|
CFRunLoopRun()
|
|
}
|
|
}
|