草庐IT

grand-central-dispatch

全部标签

swift - 完成处理程序 dispatch_async 出错?

这个问题在这里已经有了答案:HowdoIdispatch_sync,dispatch_async,dispatch_after,etcinSwift3,Swift4,andbeyond?(6个答案)关闭5年前。我在下面的函数中有完成处理程序staticfuncfetchFeatureApp(completionHandler:@escaping([AppCategory1])->()){leturlString="http://ebmacs.net/ubereats/Api/all_product?id=1"leturl=URL(string:urlString)!URLSession

swift - Linux 中的异步 Swift 处理不起作用

我正在尝试了解Swift4.0异步处理在Linux中的工作原理。看了documentation之后还有一些answers所以我想出了这个简单的例子:importDispatchimportGlibcDispatchQueue.main.asyncAfter(deadline:.now()){print("Done!")}print("Sleepingfor2seconds...")usleep(2*1_000_000)print("Exiting...")但是,这只会打印:Sleepingfor2seconds...Exiting...为什么不打印Done!?我错过了什么?如何编写一个

swift - 在不锁定 UI 线程的情况下将图像转换为 iOS 中的视频 (Swift)

我正在尝试将图像快照转换为视频,但我遇到了UI线程问题:我的ViewController已锁定。我想知道如何处理这个问题,因为我做了很多研究并试图将流程分离到不同的DispatchQueues中,但没有一个有效。所以,它解释了为什么我没有在下面的代码中使用任何队列:classScreenRecorder{funcrenderPhotosAsVideo(callback:@escaping(_success:Bool,_url:URL)->()){varframes=[UIImage]()for_in0..UIImage{letrenderer=UIGraphicsImageRender

遇到:PytorchStreamReader failed reading zip archive: failed finding central 错误应该如何解决

遇到"PytorchStreamReaderfailedreadingziparchive:failedfindingcentraldirectory"错误是由于在读取PyTorch模型时出现的问题。这个错误通常发生在模型文件被损坏或不完整的情况下。要解决这个问题,你可以尝试以下方法:检查模型文件:首先,确保你的模型文件没有被损坏或删除。你可以检查模型文件是否存在,以确保它可用。检查文件路径:确保你提供给PyTorch的模型文件路径是正确的,并且可以被正确访问。你可以使用绝对路径或相对路径,但需要确保路径是正确的。重新下载模型文件:如果你确定模型文件存在且路径正确,但仍然遇到这个错误,可能是因

IOS - DispatchQueue.main.asyncAfter(deadline : . now()) 和 perform(_:with:afterDelay:) 之间的区别,延迟为 0

我意识到使用DispatchQueue.main.asyncAfter(deadline:.now())和perform(_:with:afterDelay:0)是有区别的当主队列“忙”时。请注意,在我的情况下,perform(_:with:afterDelay:)是从主队列调用的。看起来DispatchQueue.main.asyncAfter(deadline:.now())在下一个运行循环中立即执行任务而不关心主队列但是perform(_:with:afterDelay:)0延迟将等待并仅在主队列“空闲”时执行任务(可能不会在下一个运行循环中调用)。根据Apple文档perfor

swift - DispatchGroup 通知 block 被提前调用

在我的应用程序中早期调用DispatchGroup的通知block时出现问题,并制作了这个playground示例进行实验。根据输出,有时它甚至在第一个.leave()之前被调用。感觉我错过了一些明显的东西,现在我已经看了太久了。lets=DispatchSemaphore(value:1)letdg=DispatchGroup()funcgo()->Void{foriin1...2{doWork(attemptNo:i,who:"Lily",secs:Double.random(in:1.0...5.0))doWork(attemptNo:i,who:"Emmie",secs:Dou

ios - 在 iOS 中等待 50 个运行循环滴答

我想等待运行循环运行并且屏幕被渲染50次后再执行操作。是否有必要为此使用CAMediaTiming和一个计数器?有没有办法直接连接到NSRunLoop?我可以像这样使用50个嵌套的DispatchQueue.async调用来实现吗?importDispatchfuncwait(ticks:UInt,queue:DispatchQueue=DispatchQueue.main,_handler:@escaping()->Void){varticks=ticksfuncpredicate(){queue.async{ticks-=1ifticks编辑:如果有人想知道,当我们谈论应用程序运行

arrays - 数组在 dispatch_barrier_sync 上损坏

我有2个将数据附加到数组的函数和一个处理它的函数。我使用dispatch_barrier_sync来防止其他函数在我处理数据时更改数据。内部追加函数:autoreleasepool{dispatch_barrier_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)){[weakself]()->Voidinself?.bufferVector_.append(data)}}内部流程函数:autoreleasepool{dispatch_barrier_sync(dispatch_get_global_qu

ios - Swift - 缓慢的 UITableView 滚动(从设备存储加载图像)

我有一个UITableView,其中填充了包含仅一个文本标签或一个文本标签和一个UIImage的单元格。当应用程序运行时,图像从我的服务器下载并存储在本地设备上。每次运行该应用程序时,该应用程序都会检查新图像并下载它们。在我的cellForRowAtIndexPath函数中,我在后台线程上从设备存储加载图像,然后在主线程上更新UI。我不知道我这样做是否正确,但这是我在cellForRowAtIndexPath函数中显示图像的代码:dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),{fo

swift - GCD 未按 block 顺序执行

我正在尝试从我的Firebase数据库中检查某些节点是否存在,如果不存在,则在数据库中创建新节点。我需要我的方法loadAll()在调用第二个创建任何缺失节点的方法之前完全执行autoCheck。我尝试了一个调度组来执行此操作,但它不起作用,print("Donedownloading!")在完成检查数据库之前被调用。谢谢!!代码:funcloadAll(){vardeleted_load=falsevarpoor_load=falsevarallLoadDone=falseifletuser=FIRAuth.auth()?.currentUser{letuid=user.uidlet