如何在swift中启动全局线程

时间:2015-08-14 16:32:49

标签: ios iphone multithreading swift

有没有办法在swift中启动和停止线程,同时使线程全局化,以便它可以在任何地方使用。

如下图所示,这就是我在swift

中创建线程的方法
forms.MultiValueField

如果可行,请举例说明。或者我们可以通过NSOperation实现这一目标吗?

2 个答案:

答案 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)