- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近对 iOS 的线程感到好奇。请指出您将采取的方向,以在现代 iOS 设备上实现(如果可能)以下目标...谢谢!
用户正在输入文本,每隔几秒说一个单词。
我有时想启动 DifficultProcess 来进行一些语义处理。简而言之,我想我需要能够做四件事:
本质上,在现代(2011)(1 月下旬)iOS 中对 A、B、C 的调用是什么?我不在乎爸爸的手段! “D”是否有可能以任何方式存在?
我想这就是四个想法!
因此,我特别想向正在运行的后台进程发送一条消息,换句话说,调用一个例程(这样,如果需要,可以终止正在运行的后台进程,或者更改它的模式操作等)。
(对于 1997 年之前出生的任何人,您都会认识到这是典型的“推测性处理”范例。)
感谢任何对此感到困扰的人的指点!
最佳答案
我建议使用 NSOperation 和 NSOperationQueue 来管理您需要能够任意取消的后台事件。
NSOperation 的 -cancel 和 NSOperationQueue 的 -cancelAllOperations 是值得关注的方法。
要将消息从后台返回到主线程,dispatch_async-to-main-thread-queue 技术就很好。您可以将其与 NSOperation 的委托(delegate)协议(protocol)结合起来,以编码您要发回的消息。
例如
@protocol MyOperationDelegate
- (void) operationStarted:(MyOperation *)operation;
- (void) makingProgressOnItem:(id)anItem otherInterestingItem:(NSDictionary *)otherItem remainingCount:(NSUInteger)count;
- (void) operationWillFinish:(MyOperation *)operation;
@end
@interface MyOperation
id <MyOperationDelegate> delegate;
@end
@implementation MyOperation
...
- (void) cancel
{
[super cancel];
// Tell the delegate we're about to finish (due to cancellation).
dispatch_sync (dispatch_get_main_queue(), ^{
[self.delegate operationWillFinish:self];
});
}
- (void) main
{
// Check for cancellation
if (self.isCancelled) return;
// Starting
dispatch_sync (dispatch_get_main_queue(), ^{
[self.delegate operationStarted:self];
});
if (self.isCancelled) return; // Another cancel check
// Send async progress messages periodically while doing some work
while (workNotDone)
{
// Do some work ...
dispatch_async (dispatch_get_main_queue(), ^{
[self.delegate makingProgressOnItem:foo otherInterestingItem:bar remainingCount:baz];
});
if (self.isCancelled) return;
}
// About to finish
if (!self.isCancelled) {
dispatch_sync (dispatch_get_main_queue(), ^{
[self.delegate operationWillFinish:self];
});
}
}
@end
<小时/>
KVO 不利于线程间通信;在发起键值更改的线程上接收观察结果。因此,如果您的后台线程更改了某个值,您的后台线程将收到有关该值的 KVO。可能不是您想要的。
Grandpa 的 -performSelectorOnMainThread:withObject:waitUntilDone: 仍然是将消息返回到主线程的好方法。限制是您的消息只能访问一个基于对象的参数。主线程的dispatch_async没有这个限制。
如果你想从后台线程向主线程触发异步(或同步)NSNotification,则需要使用-performSelectorOnMainThread。
NSNotification *note = [NSNotification notificationWithName:FinishedABunchOfWorkNotification object:self userInfo:nil];
[[NSNotificationCenter defaultCenter] performSelectorOnMainThread:@selector(postNotification:) withObject:note waitUntilDone:YES];
关于iphone - 线程、优先级和放弃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4741568/
我用 Flash 创建全屏交互式演示,最近一直在寻求迁移到新语言。我的 Flash 演示基本上是软件原型(prototype),在浏览器之外的投影仪 EXE 中运行。我想离开 Flash 有多种原因,
偶尔,对于转瞬即逝的时刻,我认为 auto_ptr 很酷。但大多数时候,我认识到有更简单的技术可以让它变得无关紧要。例如,如果我想自动释放一个对象,即使抛出异常,我也可以新建该对象并分配给一个 aut
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
Microsoft 于 2024 年 8 月 30 日[1]宣布推出 ASP.NET Core OData 9 包。 这个新包将ASP.NET Core与.NET 8 OData库保持一致,改变了OD
放弃当前在 Mercurial topic 中不需要的变更集的最佳方法是什么,这些变更集已经被推送并且不能被剥离? 换句话说,是否可以从 hg topics 输出中删除主题而不发布它? 最佳答案 hg
在过去几天沮丧地尝试将我的代码重构为最佳设计模式,即显示模块模式,或者甚至只是满足于简单的命名空间之后,我得出的结论是,对我来说,一个优雅的设计模式被破坏 visual studio intellis
我有一个构造 auto_ptr 的类并获得 T由效用函数填充的对象数据。但是,我想要 T由对象管理器存储的对象,该对象将在应用程序的整个生命周期内持续存在。 问题是 - 一旦我提取了 auto_ptr
在 C/C++ 中是否有可能“放弃”线程的 CPU 时间?例如: void wait(int s) //Low cpu usage { int tmp = time(); while(tmp +
概览:我创建了一个具有客户区域和管理区域的系统。这两个区域都有不同的登录页面。用户可以在管理区域以用户 A 身份登录,同时在客户区域以 用户 B 身份登录。 当用户从客户或管理区域注销时,调用 Ses
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
[temp.spec]/6通过 P0692R1 的实现添加到 C++20 (特化访问检查)[ 重点 矿]: [temp.spec]/6 The usual access checking rules
因此,情况是我使用 SB 队列来限制对其他服务的传出回调。回拨其他服务的标准问题之一是它们可能会出现无法控制的停机时间。假设我检测到目标已关闭/没有响应,放弃该消息以使其不会立即重新出现在队列中的最佳
我有一个使用MVVM模式的WPF应用程序,其中ViewModel调用执行所有保存/更新/获取/删除内容的查询。我这样做是因为,例如,修改查询以交换存储系统很容易。 如果即时存储/删除数据,但该应用程序
很抱歉,如果这个问题很愚蠢或已得到解答,但我在任何地方都找不到是或否。 在我们的生产 Oracle 环境中,是否可以删除架构 SCOTT? 我知道它是一个示例架构,但我们的安全部门希望删除任何未使用的
如果我将所有文件(图像、样式表、JavaScript、图标...)与 index.html 文件一起直接放入元素文件夹;不使用子文件夹来构建我的文件,例如图像、CSS...这会带来性能优势吗? 当然。
所以我有一个相当老的应用程序,最后一次在 iPhone X(s) 发布之前使用。始终使用启动图像源而不是启动屏幕文件,如下所示。 我现在在 iPhone X 上启动时遇到问题,因为屏幕尺寸是从 Lau
我有一个 Canvas 比手机屏幕大的绘图应用程序。我想实现用两根手指滚动并用一根手指绘图。到目前为止,我可以使滚动工作得很好,但是当涉及到绘图时,线条开始,然后绘图所在的 View 失去了对触摸的控
是否可以放弃对 iPhone 3GS 对新 App 的支持?因为我正在从 iPad 游戏移植到 iPhone。 480*320分辨率太小了。很难将我当前的游戏移植到它上面。但是高分辨率的 iPhone
我有一个 Python 应用程序,它在单独的线程中运行作业。一些 workerjobs 为数据库连接实现 pymongo。 class Job(Thread): ... self.
我有一个提交到启动脚本的 PHP 页面的 HTML 表单。该脚本可能需要 3 秒到 30 秒的时间才能运行 - 用户无需在附近即可完成该脚本。 是否可以启动一个 PHP 脚本,立即向用户打印“谢谢”(
我是一名优秀的程序员,十分优秀!