问题标签 [dispatch-queue]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
17 回答
327678 浏览

ios - 如何在swift中使用后台线程?

如何在swift中使用线程?

0 投票
2 回答
8561 浏览

swift - 停止在主线程上运行的 DispatchQueue

我有这段代码:

现在,我希望能够阻止该线程执行。我怎样才能阻止它被执行?例如,3 秒后,我决定不再执行它,所以我想停止它。

0 投票
5 回答
20401 浏览

ios - DispatchQueue.global(qos: .userInteractive).async 是否与 DispatchQueue.main.async 相同

我正在阅读教程: https ://www.raywenderlich.com/148513/grand-central-dispatch-tutorial-swift-3-part-1

并遇到了 QoS 类User-interactive的定义。它在那里提到这应该在主线程上运行。所以,我的问题是

谢谢!!

0 投票
1 回答
1004 浏览

swift - 同步和异步如何与线程安全一起工作?

在 Swift 中,我们可以利用DispatchQueue来防止竞争条件。通过使用串行队列,所有事情都按顺序执行,来自https://developer.apple.com/library/content/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html

串行队列(也称为私有调度队列)按添加到队列的顺序一次执行一项任务。当前正在执行的任务在由调度队列管理的不同线程上运行(可能因任务而异)。串行队列通常用于同步对特定资源的访问。

但是我们可以很容易地制造死锁如何在 Grand Central Dispatch 中制造死锁?通过执行sync内部async

防止死锁的唯一方法是使用 2 个串行队列,每个用于syncasync函数版本。但这可能会在同时发生时导致罕见writeSync的情况。writeAsync

我在fs 模块中看到它同时支持syncasync功能,例如fs.writeFileSync(file, data[, options])fs.writeFile(file, data[, options], callback)。通过允许两个版本,这意味着用户可以按照他们想要的任何顺序使用它们?所以他们可以像我们上面所做的那样轻松创建死锁?

所以也许fs有一个聪明的方法可以应用到 Swift 上?我们如何以线程安全的方式sync同时支持这两者?async

0 投票
1 回答
121 浏览

ios - 结束异步进程的正确方法

所以我有这个代码:

这可以正常工作,但如果当前正在下载的项目需要更长的时间,那么用户点击“结束”按钮,“进度对话框”在当前项目完成之前不会关闭。这使得“结束”按钮在用户的视角中不起作用。

在 Android 中,我们可以中断 AsyncTask 进程并结束它。在 Swift 中还有另一种方法吗?就像当用户点击“结束”时,该过程应该立即停止并关闭“进度对话框”。

0 投票
3 回答
700 浏览

ios - Swift线程多个任务?

我有这个应该显示用户名的标签。现在,我已经做了相当多的 IOS 开发,但是线程对我来说仍然有点不清楚。我将如何确保此代码完成:

在执行此操作之前?:

我一直在摸索,DispatchQueue但我似乎无法弄清楚......提前谢谢!

0 投票
1 回答
8367 浏览

ios - 将过滤器应用于实时相机预览 - Swift

我正在尝试按照此处给出的答案:https ://stackoverflow.com/a/32381052/8422218创建一个使用后置摄像头并添加过滤器的应用程序,然后将其实时显示在屏幕上

这是我的代码:

我的故事板包含一个 UIImageView,它是整个屏幕的大小。当我运行我的应用程序时,我只能看到相机预览,但看不到应用到它的过滤器。我哪里错了?

我还找到了以下存储库,其中包含创建应用程序所需的所有相关代码。https://github.com/altitudelabs/iOSRealTimeFilterTutorial

它是用 Objective-C 编写的,并且已经过时了,但是我尝试将其转换为 Swift 代码,但没有成功:

我只是得到一个空白屏幕。

0 投票
2 回答
2042 浏览

swift - 在循环中使用 dispatchQueue

我正在尝试延迟循环某些内容(仅作为概念证明),这是为了其他内容。但为了简化它,这里有一个例子。

所以在这个例子中,我有一个带有“文本”的字符串,我想循环添加另一个字符串让我们说 10 次。唯一的事情是我希望每次迭代都有延迟。到目前为止,这是我的代码。

// 全局变量

var myString = "文本"

// 按钮内的动作

我应该补充一点,结果是立即添加了所有 10 个“另一个文本”,没有任何延迟。

谢谢你

0 投票
2 回答
5364 浏览

swift - 处理多个完成处理程序

我正在尝试为数组中的每个元素协调多个完成处理程序。

代码本质上是这样的:

因此,Array 中的每个元素都通过带有完成处理程序的服务发送,并且所有结果都存储在一个数组中。一旦所有这些处理程序完成,我希望执行一些代码。

我试图用DispatchQueue

但是 print 调用仍然是先执行的,有一个空的Dictionary

0 投票
1 回答
1702 浏览

swift - Swift 4:从 DispatchQueue.main(范围)访问变量

我有一个 CoreML 图像分类任务,它从 iOS 设备的 [视频] 摄像头获取“实时流”并在后台发生。一旦确定了对象,并且发生了其他应用程序逻辑,我想用一些数据更新 UI 的标签。

有人可以解释标注如何DispatchQueue.main.asyc(execute: { })访问我一直在使用的变量吗?我认为这本质上是一个范围界定问题?

我目前使用的代码:

self.labelPrediction.text = ""是导致问题的 switch 语句中的行。此 var 当前始终为 0。