我需要一个函数,它只能调用一次,您必须等到下一个函数可以执行
private func receive(){
var inputBuffer = Array<UInt8>(repeating: 0, count: BUFFER_MAX);
let bytesRead = self.inputStream.read(&inputBuffer, maxLength: BUFFER_MAX);
if(bytesRead > 0){
let string = convertToString(byteArray: inputBuffer, length: bytesRead);
// Call if previous is finished
CommandHandler.convert(string);
}
}我测试过这样的东西:
var dispQueue = DispatchQueue(label: "commandConvert")
...
private func convert(){
dispQueue.sync {
...
}
}但这不管用
发布于 2017-09-03 02:01:00
前几天我就遇到了这个问题。
您可以使用回调或调度组解决此问题。以下是Dispatch Group解决方案:
class test {
let myDispatchGroup = DispatchGroup()
func receive () {
myDispatchGroup.enter()
var inputBuffer = Array<UInt8>(repeating: 0, count: BUFFER_MAX);
let bytesRead = self.inputStream.read(&inputBuffer, maxLength: BUFFER_MAX);
if(bytesRead > 0){
let string = convertToString(byteArray: inputBuffer, length: bytesRead);
myDispatchGroup.leave()
}
myDispatchGroup.notify(queue: DispatchQueue.main) {
// Call if previous is finished
CommandHandler.convert(string);
}
}https://stackoverflow.com/questions/46016591
复制相似问题