问题标签 [grand-central-dispatch]

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 投票
1 回答
2973 浏览

iphone - iphone - 在 Grand Central Dispatch 的辅助线程上使用 usleep 可以吗?

我正在使用 Grand Central Dispatch 向队列(不是主队列)添加一个块。这个块有一个循环,在循环的每个通道之间需要一个 0.02 秒的小延迟。我在用

在这个队列上。由于不是主队列,所以不会阻塞主线程。

问题是Xcode抱怨:警告:函数'usleep'的隐式声明

还有其他方法吗?

谢谢。

0 投票
3 回答
9142 浏览

objective-c - iPhone:使用 dispatch_after 来模仿 NSTimer

对积木知之甚少。你会如何去模仿一个重复NSTimerwith dispatch_after()?我的问题是,当应用程序移至后台时,我想“暂停”一个计时器,但子类化NSTimer似乎不起作用。

我尝试了一些似乎有效的方法。我无法判断它的性能影响或是否可以大大优化。欢迎任何意见。

0 投票
2 回答
3349 浏览

iphone - DISPATCH_SOURCE_TYPE_TIMER 未触发

我正在全局队列上创建一个计时器,配置为从创建时间开始 45 秒后触发,但由于某种原因,它似乎根本没有触发。现在将其更改为开火也无济于事。

其余的应用程序有很多事情要做,所以可能有一些东西会抢先触发计时器。

这是计时器的创建方式:

1)什么是尝试调试/找出它为什么不触发的好方法?如果不,

2)有没有办法列出计划在特定时间点在队列上运行的所有给定任务?

该应用程序完成的某些工作无法在模拟器上启动,因此我需要在测试设备本身上进行调试。

0 投票
1 回答
954 浏览

iphone - 当 main_queue 在另一个上创建调度计时器时,暂停调度计时器

除了计划运行的队列之外,您能否暂停队列中的 GCD 定时器?

我有一个计时器,在 global_queue 上以低优先级创建,当它触发时,我通过 main_queue 操作一些 UI 工作。对于 UI 中的某些状态,我必须暂停计时器。我是否必须从 main_queue 切换回低优先级队列才能执行挂起?

0 投票
1 回答
1340 浏览

macos - Grand Central Dispatch 应该创建多少线程?

我知道 GCD 只会根据需要创建尽可能多的线程以充分利用 CPU。在dispatch_async用于启动大约 30 个后台任务的代码中,我看到 Activity Monitor 中的线程数增加了大约 30 个。我没想到会这样,因为它只是一台双核 PC。

我确定我误解了一些东西。有人可以告诉我发生了什么吗?

0 投票
1 回答
2229 浏览

iphone - 何时 dispatch_release()?

我对 GCD 相当陌生,并试图找到答案。假设我有以下代码:

我应该在代码中的哪个位置释放队列?街区内还是街区外?

0 投票
1 回答
3261 浏览

iphone - iPhone - GCD 检查队列是否已挂起

我必须使用dispatch_resume(...);来恢复暂停的调度,但是由于应用程序的多个部分可能会调用恢复调度的方法,所以我需要在调用它恢复之前知道调度是否被暂停(文档说我必须平衡调度恢复/暂停,并且不能有比暂停更多的恢复,否则我将以“负暂停计数器”结束。

有没有办法测试调度是否被暂停?

0 投票
1 回答
1872 浏览

iphone - 为什么 MPMovieDurationAvailableNotification 只为我的多个 MPMoviePlayerController 实例发送一次?

我有一个 UITableView,它列出了磁盘上的电影文件。对于每个单元格行,为每个可见行分配一个工作实例,用于为电影文件生成缩略图并获取其在行中显示的持续时间。

对于工作类中的每个 MPMoviePlayerController 实例,我正在监听来自电影播放器​​的 MPMovieDurationAvailableNotification 事件。由于某种原因,这个事件似乎只能从其中一个工作实例中分派(或者至少我只能捕获它)。这是初始化和侦听器代码。内联有一些评论。

}

}

}

我究竟做错了什么?我想如果我将 object: 参数设置为 MPMoviePlayerController 的实例,它将只允许我获取该实例的事件。但是,我似乎只收到了最后一次发送的通知。

0 投票
2 回答
6826 浏览

iphone - 将效果应用于 iPhone 相机预览“视频”

我的目标是编写一个自定义的相机视图控制器:

  1. 可以使用后置摄像头和前置摄像头(如果有的话)在所有四个界面方向上拍照。
  2. 正确旋转和缩放预览“视频”以及全分辨率照片。
  3. 允许将(简单)效果应用于预览“视频”和全分辨率照片。

实现(在 iOS 4.2 / Xcode 3.2.5 上):

由于要求(3),我需要下拉到 AVFoundation。

我从技术问答 QA1702开始并进行了以下更改:

  1. 将 sessionPreset 更改为 AVCaptureSessionPresetPhoto。
  2. 在开始会话之前添加了 AVCaptureStillImageOutput 作为附加输出。

我遇到的问题是处理预览图像(预览“视频”的帧)的性能。

首先,我imageFromSampleBuffer:captureOutput:didOutputSampleBuffer:fromConnection:. 然后,我使用 CGGraphicsContext 为屏幕缩放和旋转它。

此时,帧速率已经低于会话视频输出中指定的 15 FPS,当我添加效果时,它会下降到 10 以下或左右。由于内存不足,应用程序很快就会崩溃。

我在将 iPhone 4 的帧速率降低到 9 FPS 并将 iPod Touch(第 4 代)的帧速率降低到 8 FPS 方面取得了一些成功。

我还添加了一些代码来“刷新”调度队列,但我不确定它实际上有多大帮助。基本上,每 8-10 帧,就会设置一个标志,指示captureOutput:didOutputSampleBuffer:fromConnection:立即返回而不是处理该帧。在输出调度队列上的同步操作完成后,该标志被重置。

在这一点上,我什至不介意低帧率,但显然我们不能在低内存崩溃的情况下发货。任何人都知道在这种情况下如何采取措施来防止内存不足的情况(和/或“刷新”调度队列的更好方法)?

0 投票
2 回答
695 浏览

objective-c - Objective-C 和 Quartz Composer;[qcView pauseRendering] 导致 Bad_Access

提前致谢。

我有一个 Quartz Composer 视图(下面的 qcView)并在随机方向移动图像(蚂蚁的,如果你想知道代码),直到它在 QCView 中间找到它的“家”。pauseRendering 是必要的,这样我们才能看到蚂蚁一寸一寸地移动;没有它,蚂蚁只会出现在它的“家”。

这对于单个蚂蚁来说非常有效。

当我在等式中添加另一个蚂蚁时,我使用了一个调度队列和两个块。

当这段代码运行时,两个阿姨同时匆匆赶到他们家——这正是我们正在寻找的行为。但是,当我停止执行并再次构建时,我会立即从 [qcView pauseRendering] 方法中的某处获得 Exc_Bad_Access。在 Clean & Build 之后,它将完美地运行一次。移除 pauseRendering 和 resumeRendering 后,蚂蚁会立即出现在它们的家中。

显然,QCView pauseRendering 方法有一个本地数组,该数组不断增长和缩小,通过单个 QCView 和多个块访问它,您可以看到问题的根源。

我研究了QCView 文档,但似乎找不到灵感;pauseRendering 的文档很少。虽然我敢肯定你们中没有人尝试过像这样愚蠢的事情,但我希望有人有实际修改 QCView 的经验,并且能够指出我正确的方向(错误......阅读“任何!”)方向.

[编辑:如果有帮助,我已经尝试过“while (![qcView isPausedRendering])”的变体。]