我用NSThread创建了一个新的线程,然后它正在执行thread_funtion,我想取消线程,我用[thread cancel],但是线程会继续。
NSThread *thread=[[NSThread alloc] initWithTarget:self selector:@selector(thread_funtion) object:nil];
[thread start];
-(void)thread_funtion
{
//my code
}
我知道在 thread_function 中使用标志来控制它的执行,它可能很有用,但它太复杂了。
-(void)thread_funtion
{
if(flag)
{
//some code
}
if(flag)
{
//some code
}
}
那么问题一:如何立即取消线程?
然后我使用另一种方法创建一个新线程:
pthread_t id;
int ret;
ret=pthread_create(&id,NULL,thread_function,NULL);
if(ret!=0){
printf ("Create pthread error!\n");
exit (1);
}
然后我使用pthread_cancel(id),线程会立即停止。 但是在 thread_function 中:
void* thread_function(void *arg)
{
//This is not a function of the class, So I can't use self.somobject !
}
所以问题是,在 C 代码中,如何使用类的对象?
最佳答案
NSThread
取消只是在线程中设置一个标志,它可以通过调用 isCancelled
来发现。如果线程打算继续,它不会停止线程。
这实际上是一件好的事情。根据我在多线程方面的长期经验,我认为 theads 应该完全控制自己,包括它们自己的生命周期。
在线程锁定资源时或在更新关键结构的过程中杀死线程不是一个好主意。
最好重新构建线程函数,以便它们定期调用 isCancelled
并据此采取行动。如果操作正确,您可以通过检查某些点、在循环内检查、确保任何阻塞调用都有超时或解除阻塞的方法等来保证响应取消的最大延迟。
关于iphone - 如何立即取消线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12906895/