【发布时间】:2019-10-13 12:24:05
【问题描述】:
我正在使用 swift 开发国际象棋游戏。当计算机自己玩时,移动完成后显示不会更新,直到它退出循环(在这种情况下游戏结束)。
我试图在后台队列中调度它以生成移动并将其调度回主队列以进行移动并更新显示。虽然这似乎有助于更新显示,但我无法预测每个后台队列的完成情况。这会打乱移动的顺序。
有没有更好的方法让电脑自动播放并在每次移动完成后正确更新显示?
while chessGame.checkmate != true {
DispatchQueue.global(qos: .background).async {
let bestMove = chessAI.findBestMove(depth : chessGame.searchDepth)
if bestMove != nil {
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()) {
chessMove.makeMove(m : bestMove!)
self.boardView.setNeedsDisplay()
}
} else {
print("CheckMate!")
chessGame.checkmate = true
}
}
}
【问题讨论】:
标签: multithreading user-interface swift3 thread-safety dispatch