我在日志中看到“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而不是另一个。我的天啊。
答案 0 :(得分:0)
尝试将变量mKillThread设置为volatile。这会对编译器说这个变量将在多个线程中使用,它不应该做一些可能导致你的问题的优化。
volatile bool mKillThread;
答案 1 :(得分:0)
据推测,编译器完全优化了if
子句,因为它可以推断while
循环mKillThread
内必须false
,因此if
子句没有必要。
请注意,(Objective-)C(++)编译器可以进行这种优化。
要告诉编译器可以从另一个线程访问变量,依此类推,请使用volatile
。
或者通过getter访问它也足够[self mKillThread]
。