0

我用NSThread创建一个新线程,然后它正在执行thread_funtion,我想取消线程,我用[线程取消],但是线程会继续。

NSThread *thread=[[NSThread alloc] initWithTarget:self selector:@selector(thread_funtion) object:nil];
[thread start];

-(void)thread_funtion
{
     //my code
}

我知道在 thread_funtion 中使用标志来控制它的执行,它可能很有用,但它太复杂了。

-(void)thread_funtion
{
      if(flag)
    {
        //some code
    }
    if(flag)
    {
        //some code
    }
}

那么问题1:如何立即取消线程?</p>

然后我使用另一种方法来创建一个新线程:

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代码中,如何使用类的对象?

4

1 回答 1

3

NSThread取消只是在线程中设置一个标志,它可以通过调用isCancelled. 如果线程打算继续,它不会停止线程。

这实际上是一件好事。根据我在多线程方面的长期经验,我认为头条应该完全控制自己,包括他们自己的生命周期。

当线程锁定资源或在更新关键结构中途时杀死线程不是一个好主意。

重新构建线程函数是一个好主意,以便它们定期调用isCancelled并采取行动。如果你做得对,你可以通过在某些点检查、在循环内检查、确保任何阻塞调用都有超时或解除阻塞的方法等来保证对取消响应的最大延迟。

于 2012-10-16T03:09:17.110 回答