0

我想用NSTimer每 20 秒运行一个函数,但我把它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永远不会被NSTimerin func2执行。有人说NSTimer只有run in .main thread是真的吗??所以不能NSTimerNSThread函数中启动?

4

2 回答 2

4

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

这样想:

  • 启动线程
  • 开始线程运行循环
  • -func2
  • 结束运行循环
  • 睡眠线程

您已在设置计时器后立即进入睡眠状态的线程上安排了计时器。没有运行循环;没有计时器触发。


更新

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

于 2013-03-12T02:46:13.563 回答
0

您可以通过以下方式将计时器添加到当前线程的运行循环

(void)addTimer:(NSTimer*)aTimer forMode:(NSString*)mode

编辑:

对您有用的链接:https ://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/CreatingThreads/CreatingThreads.html#//apple_ref/doc/uid/10000057i-CH15-SW25

于 2013-03-12T02:42:25.473 回答