@@ -56,28 +56,33 @@ private func NSThreadStart(_ context: UnsafeMutableRawPointer?) -> UnsafeMutable
56
56
return nil
57
57
}
58
58
59
- open class Thread : NSObject {
59
+ open class Thread : NSObject {
60
60
61
61
static internal var _currentThread = NSThreadSpecific < Thread > ( )
62
- public static var current : Thread {
62
+ open class var current : Thread {
63
63
return Thread . _currentThread. get ( ) {
64
64
return Thread ( thread: pthread_self ( ) )
65
65
}
66
66
}
67
+
68
+ open class var isMainThread : Bool { NSUnimplemented ( ) }
69
+
70
+ // !!! NSThread's mainThread property is incorrectly exported as "main", which conflicts with its "main" method.
71
+ open class var mainThread : Thread { NSUnimplemented ( ) }
67
72
68
73
/// Alternative API for detached thread creation
69
74
/// - Experiment: This is a draft API currently under consideration for official import into Foundation as a suitable alternative to creation via selector
70
75
/// - Note: Since this API is under consideration it may be either removed or revised in the near future
71
- open class func detachNewThread( _ main : @escaping ( Void ) -> Void ) {
72
- let t = Thread ( main )
76
+ open class func detachNewThread( _ block : @escaping ( ) -> Swift . Void ) {
77
+ let t = Thread ( block : block )
73
78
t. start ( )
74
79
}
75
80
76
81
open class func isMultiThreaded( ) -> Bool {
77
82
return true
78
83
}
79
84
80
- open class func sleepUntilDate ( _ date: Date ) {
85
+ open class func sleep ( until date: Date ) {
81
86
let start_ut = CFGetSystemUptime ( )
82
87
let start_at = CFAbsoluteTimeGetCurrent ( )
83
88
let end_at = date. timeIntervalSinceReferenceDate
@@ -100,7 +105,7 @@ open class Thread: NSObject {
100
105
}
101
106
}
102
107
103
- open class func sleepForTimeInterval ( _ interval: TimeInterval ) {
108
+ open class func sleep ( forTimeInterval interval: TimeInterval ) {
104
109
var ti = interval
105
110
let start_ut = CFGetSystemUptime ( )
106
111
let end_ut = start_ut + ti
@@ -135,21 +140,25 @@ open class Thread: NSObject {
135
140
internal var _status = _NSThreadStatus. initialized
136
141
internal var _cancelled = false
137
142
/// - Note: this differs from the Darwin implementation in that the keys must be Strings
138
- open var threadDictionary = [ String: AnyObject] ( )
143
+ open var threadDictionary = [ String : AnyObject] ( )
139
144
140
145
internal init ( thread: pthread_t ) {
141
146
// Note: even on Darwin this is a non-optional pthread_t; this is only used for valid threads, which are never null pointers.
142
147
_thread = thread
143
148
}
144
-
145
- public init ( _ main: @escaping ( Void ) -> Void ) {
146
- _main = main
149
+
150
+ public override init ( ) {
147
151
let _ = withUnsafeMutablePointer ( to: & _attr) { attr in
148
152
pthread_attr_init ( attr)
149
153
pthread_attr_setscope ( attr, Int32 ( PTHREAD_SCOPE_SYSTEM) )
150
154
pthread_attr_setdetachstate ( attr, Int32 ( PTHREAD_CREATE_DETACHED) )
151
155
}
152
156
}
157
+
158
+ public convenience init ( block: @escaping ( ) -> Swift . Void ) {
159
+ self . init ( )
160
+ _main = block
161
+ }
153
162
154
163
open func start( ) {
155
164
precondition ( _status == . initialized, " attempting to start a thread that has already been started " )
@@ -166,6 +175,10 @@ open class Thread: NSObject {
166
175
open func main( ) {
167
176
_main ( )
168
177
}
178
+
179
+ open var name : String ? {
180
+ NSUnimplemented ( )
181
+ }
169
182
170
183
open var stackSize : Int {
171
184
get {
@@ -189,27 +202,37 @@ open class Thread: NSObject {
189
202
}
190
203
}
191
204
192
- open var executing : Bool {
205
+ open var isExecuting : Bool {
193
206
return _status == . executing
194
207
}
195
208
196
- open var finished : Bool {
209
+ open var isFinished : Bool {
197
210
return _status == . finished
198
211
}
199
212
200
- open var cancelled : Bool {
213
+ open var isCancelled : Bool {
201
214
return _cancelled
202
215
}
203
216
217
+ open var isMainThread : Bool {
218
+ NSUnimplemented ( )
219
+ }
220
+
204
221
open func cancel( ) {
205
222
_cancelled = true
206
223
}
207
224
208
- open class func callStackReturnAddresses( ) -> [ NSNumber ] {
225
+ open class var callStackReturnAddresses : [ NSNumber ] {
209
226
NSUnimplemented ( )
210
227
}
211
228
212
- open class func callStackSymbols( ) -> [ String ] {
229
+ open class var callStackSymbols : [ String ] {
213
230
NSUnimplemented ( )
214
231
}
215
232
}
233
+
234
+ extension NSNotification . Name {
235
+ public static let NSWillBecomeMultiThreaded = NSNotification . Name ( rawValue: " " ) // NSUnimplemented
236
+ public static let NSDidBecomeSingleThreaded = NSNotification . Name ( rawValue: " " ) // NSUnimplemented
237
+ public static let NSThreadWillExit = NSNotification . Name ( rawValue: " " ) // NSUnimplemented
238
+ }
0 commit comments