iPhone - 无法用循环杀死我的线程

时间:2011-05-22 19:04:58

标签: iphone multithreading

我在日志中看到“killThread”,但线程没有停止。如果我在调用循环之前将mKillThread设置为true,它将永远不会运行。我尝试使用bool mKillThread并使用属性和self.mKillThread ...以下是代码中对mKillThread的唯一引用。

初​​始化:

mKillThread = false;
//mKillThread = true;
[NSThread detachNewThreadSelector:@selector(threadLoop) toTarget:self withObject:nil];

线程:

// Called on main thread
- (void)killThread {   
    NSLog(@"killThread");
    mKillThread = true;
}

- (void)threadLoop {
    while ( !mKillThread ) {
        if ( mKillThread ) {

            NSLog(@"killthread haha!");
            return;
        }
        NSLog(@"looping!");
    }
}

编辑 -

想出来,我在xib设置为MyViewSubclass时有2个视图,所以我创建了2个线程。我只是在我连接的自定义视图上调用killThread而不是另一个。我的天啊。

2 个答案:

答案 0 :(得分:0)

尝试将变量mKillThread设置为volatile。这会对编译器说这个变量将在多个线程中使用,它不应该做一些可能导致你的问题的优化。

volatile bool mKillThread;

答案 1 :(得分:0)

据推测,编译器完全优化了if子句,因为它可以推断while循环mKillThread内必须false,因此if子句没有必要。

请注意,(Objective-)C(++)编译器可以进行这种优化。

要告诉编译器可以从另一个线程访问变量,依此类推,请使用volatile。 或者通过getter访问它也足够[self mKillThread]