问题标签 [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.
iphone - iphone - 在 Grand Central Dispatch 的辅助线程上使用 usleep 可以吗?
我正在使用 Grand Central Dispatch 向队列(不是主队列)添加一个块。这个块有一个循环,在循环的每个通道之间需要一个 0.02 秒的小延迟。我在用
在这个队列上。由于不是主队列,所以不会阻塞主线程。
问题是Xcode抱怨:警告:函数'usleep'的隐式声明
还有其他方法吗?
谢谢。
objective-c - iPhone:使用 dispatch_after 来模仿 NSTimer
对积木知之甚少。你会如何去模仿一个重复NSTimer
with dispatch_after()
?我的问题是,当应用程序移至后台时,我想“暂停”一个计时器,但子类化NSTimer
似乎不起作用。
我尝试了一些似乎有效的方法。我无法判断它的性能影响或是否可以大大优化。欢迎任何意见。
iphone - DISPATCH_SOURCE_TYPE_TIMER 未触发
我正在全局队列上创建一个计时器,配置为从创建时间开始 45 秒后触发,但由于某种原因,它似乎根本没有触发。现在将其更改为开火也无济于事。
其余的应用程序有很多事情要做,所以可能有一些东西会抢先触发计时器。
这是计时器的创建方式:
1)什么是尝试调试/找出它为什么不触发的好方法?如果不,
2)有没有办法列出计划在特定时间点在队列上运行的所有给定任务?
该应用程序完成的某些工作无法在模拟器上启动,因此我需要在测试设备本身上进行调试。
iphone - 当 main_queue 在另一个上创建调度计时器时,暂停调度计时器
除了计划运行的队列之外,您能否暂停队列中的 GCD 定时器?
我有一个计时器,在 global_queue 上以低优先级创建,当它触发时,我通过 main_queue 操作一些 UI 工作。对于 UI 中的某些状态,我必须暂停计时器。我是否必须从 main_queue 切换回低优先级队列才能执行挂起?
macos - Grand Central Dispatch 应该创建多少线程?
我知道 GCD 只会根据需要创建尽可能多的线程以充分利用 CPU。在dispatch_async
用于启动大约 30 个后台任务的代码中,我看到 Activity Monitor 中的线程数增加了大约 30 个。我没想到会这样,因为它只是一台双核 PC。
我确定我误解了一些东西。有人可以告诉我发生了什么吗?
iphone - 何时 dispatch_release()?
我对 GCD 相当陌生,并试图找到答案。假设我有以下代码:
我应该在代码中的哪个位置释放队列?街区内还是街区外?
iphone - iPhone - GCD 检查队列是否已挂起
我必须使用dispatch_resume(...);
来恢复暂停的调度,但是由于应用程序的多个部分可能会调用恢复调度的方法,所以我需要在调用它恢复之前知道调度是否被暂停(文档说我必须平衡调度恢复/暂停,并且不能有比暂停更多的恢复,否则我将以“负暂停计数器”结束。
有没有办法测试调度是否被暂停?
iphone - 为什么 MPMovieDurationAvailableNotification 只为我的多个 MPMoviePlayerController 实例发送一次?
我有一个 UITableView,它列出了磁盘上的电影文件。对于每个单元格行,为每个可见行分配一个工作实例,用于为电影文件生成缩略图并获取其在行中显示的持续时间。
对于工作类中的每个 MPMoviePlayerController 实例,我正在监听来自电影播放器的 MPMovieDurationAvailableNotification 事件。由于某种原因,这个事件似乎只能从其中一个工作实例中分派(或者至少我只能捕获它)。这是初始化和侦听器代码。内联有一些评论。
}
}
}
我究竟做错了什么?我想如果我将 object: 参数设置为 MPMoviePlayerController 的实例,它将只允许我获取该实例的事件。但是,我似乎只收到了最后一次发送的通知。
iphone - 将效果应用于 iPhone 相机预览“视频”
我的目标是编写一个自定义的相机视图控制器:
- 可以使用后置摄像头和前置摄像头(如果有的话)在所有四个界面方向上拍照。
- 正确旋转和缩放预览“视频”以及全分辨率照片。
- 允许将(简单)效果应用于预览“视频”和全分辨率照片。
实现(在 iOS 4.2 / Xcode 3.2.5 上):
由于要求(3),我需要下拉到 AVFoundation。
我从技术问答 QA1702开始并进行了以下更改:
- 将 sessionPreset 更改为 AVCaptureSessionPresetPhoto。
- 在开始会话之前添加了 AVCaptureStillImageOutput 作为附加输出。
我遇到的问题是处理预览图像(预览“视频”的帧)的性能。
首先,我imageFromSampleBuffer:
从captureOutput:didOutputSampleBuffer:fromConnection:
. 然后,我使用 CGGraphicsContext 为屏幕缩放和旋转它。
此时,帧速率已经低于会话视频输出中指定的 15 FPS,当我添加效果时,它会下降到 10 以下或左右。由于内存不足,应用程序很快就会崩溃。
我在将 iPhone 4 的帧速率降低到 9 FPS 并将 iPod Touch(第 4 代)的帧速率降低到 8 FPS 方面取得了一些成功。
我还添加了一些代码来“刷新”调度队列,但我不确定它实际上有多大帮助。基本上,每 8-10 帧,就会设置一个标志,指示captureOutput:didOutputSampleBuffer:fromConnection:
立即返回而不是处理该帧。在输出调度队列上的同步操作完成后,该标志被重置。
在这一点上,我什至不介意低帧率,但显然我们不能在低内存崩溃的情况下发货。任何人都知道在这种情况下如何采取措施来防止内存不足的情况(和/或“刷新”调度队列的更好方法)?
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])”的变体。]