有没有办法在swift中启动和停止线程,同时使线程全局化,以便它可以在任何地方使用。
如下图所示,这就是我在swift
中创建线程的方法forms.MultiValueField
如果可行,请举例说明。或者我们可以通过NSOperation实现这一目标吗?
答案 0 :(得分:1)
使用Grand Central Dispatch
let myQueue: dispatch_queue_t = dispatch_queue_create("com.example.queue", nil)
dispatch_async(myQueue, { () -> Void in
// Execute some code
})
答案 1 :(得分:0)
我使用一个使用Central Dispatch的小函数来启动一个新线程:
typealias FuncPointer = () -> () // Pointer to a function
func startprocess (_ f: FuncPointer)
{
let atrb = DispatchQueue.GlobalAttributes.qosUserInteractive
DispatchQueue.global(attributes: atrb).async(group: DispatchGroup())
{
f()
}
}
要将函数作为线程启动,可将其称为:
startprocess(myFuncName)
功能" myFuncName"是一个没有参数但没有结果的函数。此示例适用于Swift 3.0 beta 3和Xcode 8 beta 3.您可以在不等待某事的情况下相互启动多个线程。
您可以使用以下功能:
_ = group.wait(timeout: DispatchTime.distantFuture)
等待,直到特定组的所有线程都完成。因此,您不使用DispatchGroup()启动线程,而是使用预定义的组变量。这是处理一组超过1个线程的简单方法。六个线程的示例:
let group = DispatchGroup()
let myThreadCount: Int = 6
for _ in 1...myThreadCount
{
DispatchQueue.global(attributes: DispatchQueue.GlobalAttributes.qosUserInteractive).async(group: group)
{
Calculate(NumberOfSteps / ThreadCurrentCount)
}
}
_ = group.wait(timeout: DispatchTime.distantFuture)