2012-06-08 36 views
0

我有一个名为'startTask'的无效方法。可可Mac取消后台进程

在按一下按钮,我推出“startTask”的背景如下:

[self performSelectorInBackground:@selector(startTask) withObject:nil]; 

我想取消这一过程单击按钮时,我却无法弄清楚如何做到这一点,任何人都可以请帮忙?

在此先感谢

+0

对不起一样,我才意识到你打电话'performSelectorInBackground'而不是'performSelector',改变的东西还真不少。 – Vervious

+0

另外,请参阅http://stackoverflow.com/questions/4992472/how-to-stop-performing-selector-in-background和http://stackoverflow.com/questions/7702023/prevent-performselectorinbackground-from-running-两次 – Vervious

回答

0

我会使用NSOperation和NSOperationQueue。这些允许取消。线程需要更多的工作来获取信号。

Edit--为例

创建一个简单的类的子类的NSOperation

在您的实现实现-(void)main(){ }方法。当您的操作执行时调用此方法。

在您想要从创建NSOperationQueue的成员变量来启动它的文件中。

当你想启动你的任务创建操作并将其添加到队列中。它将异步操作,您可以取消它。

这里是iOS的一个问题,但我相信它应该是可可NSOperation on the iPhone

+0

你可能会发表一个关于如何创建和取消NSOperation的例子吗?感谢您的帮助 – Cristian

+0

感谢您的帮助,有没有办法我可以取消从performselectorinbackground调用的过程? – Cristian

+0

从你的意思上说,不可能取消主题 - 在没有他们的合作的情况下突然终止它们。你只能指示他们应该退出并编写任务,以便经常检查该信号并优雅地终止自己。这是因为一个线程可能处于修改共享状态的中间,或者它可以保存共享资源,如锁。如果您从外部突然终止它,则共享状态可能处于损坏的半修改状态,或者共享资源可能会永久性地被拒绝给您的其他应用程序。 –