NSOperation 和 GCD 都不能结束当前的耗时操作吗?

2017-06-28 17:00:40 +08:00
 C90

如果不是,该如何去结束正在进行还没有完成的任务?

4496 次点击
所在节点    iDev
26 条回复
chipmuck
2017-06-28 17:14:07 +08:00
NSOperation cancel

or

NSOperationQueue cancelAllOperations
C90
2017-06-28 17:19:15 +08:00
@chipmuck 这两个方法只能取消之后的任务,并不能结束当前的任务
C90
2017-06-28 17:40:17 +08:00
@chipmuck 也许是我的姿势不对
paradoxs
2017-06-28 17:43:01 +08:00
正在执行的任务无法取消, 你可以在任务内做一个 isStop 之类的标记..
chipmuck
2017-06-28 17:47:25 +08:00
@C90

代码怎么贴。。。
C90
2017-06-28 17:47:30 +08:00
@paradoxs 我引用的是静态库里函数,没办法修改源码...
C90
2017-06-28 17:48:06 +08:00
@chipmuck 我也不知道 - -
xx314327475
2017-06-28 17:52:40 +08:00
@C90 GCD 不可以 NSOperation 可以,具体看一楼
chipmuck
2017-06-28 17:53:59 +08:00
chipmuck
2017-06-28 17:57:29 +08:00
@C90 任务如果有多行,那么可以在里面插入 flag 判断,在外部调用返回的 block 就可以实现取消了。
C90
2017-06-28 17:58:09 +08:00
@xx314327475 没有解决
C90
2017-06-28 17:58:33 +08:00
@chipmuck 只有一行代码,耗时数秒
C90
2017-06-28 17:59:40 +08:00
@chipmuck 调用的是静态库里的函数,不修改源码的前提下有没有好的办法?
chipmuck
2017-06-28 18:00:32 +08:00
@C90 不涉及 UI 的话就放其他线程跑吧。
C90
2017-06-28 18:05:12 +08:00
@chipmuck 放到了子 thread,但是没法停止
paradoxs
2017-06-28 18:07:53 +08:00
zqqf16
2017-06-28 18:13:56 +08:00
可以试试类似 pthread_cancel 的方法,不知道会不会对 GCD 管理的线程池有影响~
C90
2017-06-28 18:41:54 +08:00
@paradoxs 不太明白
C90
2017-06-28 18:46:17 +08:00
@zqqf16 这个方法可以
paradoxs
2017-06-28 19:44:00 +08:00
@C90 你要停止静态库里面的方法是吗.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/371718

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX