gpt4 book ai didi

ios - 使异步方法同步

转载 作者:可可西里 更新时间:2023-11-01 02:21:52 26 4
gpt4 key购买 nike

在 dispatch_async() 内部,我正在运行下一个代码来上传图像。该脚本同时上传所有图像,导致 CPU 以 100% 运行。我想一张一张上传图片,但不知道如何上传。我尝试使用以下代码:

dispatch_group_t group = dispatch_group_create(); 
dispatch_group_enter(group)
dispatch_group_leave(group)
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);

但这也会卡住主线程。

上传图片的代码:

    for imageObj in receiptImageObjList {

api.uploadImage(imageObj){ status, message, json in

if(status == true){
var images = json!["data"]["images"].arrayValue

cdm.imageFromApi(imageObj, jsonData: images.last!)
if(imageObj.fileName != nil){
var fileManager = FileManager()
fileManager.deleteImage(imageObj.fileName!)
}
}
}


}

最佳答案

您应该创建一个 dispatch_semaphore_t,其计数假设为 6。在每次上传开始之前,您调用 dispatch_semaphore_wait,当上传完成时(不再使用 CPU 时间)您调用 dispatch_semaphore_signal。确保无论发生什么,都会在调用 dispatch_semaphore_wait 之后调用 dispatch_semaphore_signal。

效果是您不会同时发出超过六个上传调用;第 7 个调用将等待而不花费任何 CPU 时间,直到某个调用完成并发出调用信号。除此之外,您的程序的行为不会有任何变化。除了“for image in”循环不会在一毫秒内完成,因为它会等待信号量信号,所以你最好在后台线程上运行整个循环。数字六显然可以用任何其他数字代替。

但只是说:如果 CPU 做有用的工作,使用 100% 的 CPU 也不错。如果这 100% 的 90% 都被浪费了,那就太糟糕了。

关于ios - 使异步方法同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30487299/

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