2013-03-12 69 views
0

我想用NSTimer以每页20秒跑完一个功能,但我把NSTimerNSThread function.the代码是这样的:NSTimer无法在NSThread函数中启动或运行?

-(void)func1 
{ 
    [NSThread detachNewThreadSelector:@selector(func2) 
         toTarget:self withObject:nil]; 
} 
-(void)func2 
{ 
    [NSTimer scheduledTimerWithTimeInterval:3 target:self   
    selector:@selector(func3) userInfo:nil repeats:YES]; 
} 
-(void)func3 
{ 
    //do something,but the function seems never be executed 
} 

所以问题是,FUNC3从未被执行NSTimer in func2.有人说NSTimer只能运行在main thread。这是真的吗??所以不能在NSTimer启动一个NSThread函数?

回答

4

它看起来对我来说,你的线程没有做任何事情。定时器被安排作为线程运行循环的一部分进行检查。如果线程没有运行任何代码,那么它将不会通过它的运行循环。

认为它是这样的:

  • 开始螺纹
  • 开始线程运行的循环
  • -func2
  • 结束运行循环
  • 睡眠螺纹

您已经计划了定时器在你后面睡觉的线程上设置计时器。没有运行循环;没有定时器火灾。


UPDATE

我的回答回答了这个问题,但是没有得到解决。你希望达到的最终效果是什么?

+0

@Thomasso你的意思是NSTimer可以在NSThread中设置和运行,不仅在主线程中? – SgViTiNer 2013-03-12 02:57:44

+0

如果您有长时间运行的线程,那么您可以在其上设置一个定时器。长时间运行的线程就像是一个网络线程,它正在后台下载数据或从相机或麦克风输入线程处理。 – 2013-03-12 03:09:47

+0

它甚至没有去睡觉;线程体是'func2'方法,它调度定时器,然后立即返回,线程退出。 – 2013-03-12 07:40:45