iPhone-Can';不要用循环杀死我的线程
我在日志中看到“killThread”,但线程没有停止。如果在调用循环之前将mKillThread设置为true,它将永远不会运行。我尝试简单地bool mKillThread并使用属性和self.mKillThread。。。下面是代码中对mKillThread的唯一引用 初始化: 线程内容:iPhone-Can';不要用循环杀死我的线程,iphone,multithreading,Iphone,Multithreading,我在日志中看到“killThread”,但线程没有停止。如果在调用循环之前将mKillThread设置为true,它将永远不会运行。我尝试简单地bool mKillThread并使用属性和self.mKillThread。。。下面是代码中对mKillThread的唯一引用 初始化: 线程内容: // Called on main thread - (void)killThread { NSLog(@"killThread"); mKillThread = true; }
// Called on main thread
- (void)killThread {
NSLog(@"killThread");
mKillThread = true;
}
- (void)threadLoop {
while ( !mKillThread ) {
if ( mKillThread ) {
NSLog(@"killthread haha!");
return;
}
NSLog(@"looping!");
}
}
编辑-
我发现,在xib中有2个视图被设置为MyViewSubclass,所以我创建了2个线程。我只是在连接的自定义视图上调用killThread,而不是另一个。天哪 尝试将变量mKillThread设置为volatile。这将告诉编译器,这个变量将在多个线程中使用,它不应该进行可能导致问题的优化
volatile bool mKillThread;
大概编译器优化了
if
子句,因为它可以推断while
循环mKillThread
中的必须是false
,因此if
子句是不必要的
注意,(目标-)C(++)编译器可以进行这种优化
要告诉编译器可以从另一个线程等访问变量,请使用volatile
。
或者通过getter访问它也就足够了,[self-mKillThread]
更正了语法突出显示。
volatile bool mKillThread;