gpt4 book ai didi

multithreading - 如何在不同线程上运行函数?

转载 作者:行者123 更新时间:2023-11-30 14:18:50 25 4
gpt4 key购买 nike

我需要下面的函数在不同的线程上运行。我想我必须使用并发调度队列,但我不知道如何做到这一点,所以我希望得到一些帮助!

第一个函数:

func respondToSwipeGesture(sender: UISwipeGestureRecognizer) {

switch sender.direction {
case UISwipeGestureRecognizerDirection.Left:
if self.imageView.tag == 1 {
println("1 point!")
} else {
if self.imageView.tag == 5 {
println("1 point!")
} else {
println("Game Over!")
}
}
case UISwipeGestureRecognizerDirection.Down:
if self.imageView.tag == 2 {
println("1 point!")
} else {
if self.imageView.tag == 8 {
println("1 point!")
} else {
println("Game Over!")
}
}
case UISwipeGestureRecognizerDirection.Right:
if self.imageView.tag == 3 {
println("1 point!")
} else {
if self.imageView.tag == 7 {
println("1 point!")
} else {
println("Game Over!")
}
}
case UISwipeGestureRecognizerDirection.Up:
if self.imageView.tag == 4 {
println("1 point!")
} else {
if self.imageView.tag == 6 {
println("1 point!")
} else {
println("Game Over!")
}
}
default:
break
}

第二个函数:

 @IBAction func handleAttachmentGesture(sender: UIPanGestureRecognizer) {
let location = sender.locationInView(self.view)
let boxLocation = sender.locationInView(self.imageView)

switch sender.state {
case .Began:
println("Your touch start position is \(location)")
println("Start location in image is \(boxLocation)")

// 1
animator.removeAllBehaviors()

// 2
let centerOffset = UIOffset(horizontal: boxLocation.x - imageView.bounds.midX,
vertical: boxLocation.y - imageView.bounds.midY)
attachmentBehavior = UIAttachmentBehavior(item: imageView,
offsetFromCenter: centerOffset, attachedToAnchor: location)

// 3
redSquare.center = attachmentBehavior.anchorPoint
blueSquare.center = location

// 4
animator.addBehavior(attachmentBehavior)

case .Ended:
println("Your touch end position is \(location)")
println("End location in image is \(boxLocation)")

animator.removeAllBehaviors()

// 1
let velocity = sender.velocityInView(view)
let magnitude = sqrt((velocity.x * velocity.x) + (velocity.y * velocity.y))

if magnitude > ThrowingThreshold {
// 2
let pushBehavior = UIPushBehavior(items: [imageView], mode: .Instantaneous)
pushBehavior.pushDirection = CGVector(dx: velocity.x / 10, dy: velocity.y / 10)
pushBehavior.magnitude = magnitude / ThrowingVelocityPadding

self.pushBehavior = pushBehavior
animator.addBehavior(pushBehavior)

// 3
let angle = Int(arc4random_uniform(20)) - 10

itemBehavior = UIDynamicItemBehavior(items: [imageView])
itemBehavior.friction = 0.2
itemBehavior.allowsRotation = true
itemBehavior.addAngularVelocity(CGFloat(angle), forItem: imageView)
animator.addBehavior(itemBehavior)

// 4
let timeOffset = Int64(0.4 * Double(NSEC_PER_SEC))
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, timeOffset), dispatch_get_main_queue()) {
self.resetDemo()
}
} else {
resetDemo()
}

default:
attachmentBehavior.anchorPoint = sender.locationInView(view)
redSquare.center = attachmentBehavior.anchorPoint
}

最佳答案

不确定您要做什么(尚未阅读完整代码)。但是,如果您确定需要在不同的队列上运行,这里有一个可能对您有帮助的简单示例:

let aCustomQueue = dispatch_queue_create("aCustomQueueLabel", DISPATCH_QUEUE_CONCURRENT)
let anotherCustomQueue = dispatch_queue_create("anotherCustomQueueLabel", DISPATCH_QUEUE_CONCURRENT)

dispatch_async(aCustomQueue) {

for _ in 0...1000 {
NSLog("Hello") // println("Hello") will print char by char
}
}


dispatch_async(anotherCustomQueue) {

for _ in 0...1000 {
NSLog("World") // println("World") will print char by char
}

}

否则,您可能想看看:

关于multithreading - 如何在不同线程上运行函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30765388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com