在特定时间间隔iOS上无限期地在单独的线程中运行代码

时间:2016-12-02 11:11:09

标签: android ios objective-c swift multithreading

  

目标

  • 定期无限期运行代码
  • 使用线程
  • 不使用计时器
  

来自Android的示例就像这样

Thread thread = new Thread() {
            @Override
            public void run() {

                while (recordingState == STATE.RECORDING) {

                    System.out.println("Yay! we are still recording")

                    try {
                        Thread.sleep(1000 / 12); //12 fps refresh rate
                    } catch (InterruptedException ignored) {

                    }
                }
            }
        };

thread.start();

此代码每秒运行12帧,直到我们正在录制。

iOS (Swift)上的类似内容可以通过使用计时器来实现(按特定时间间隔安排)但是,有没有更类似于上述方法?

注意:我不了解Objective-C所以,如果你能在Swift中尝试回答,不过欢迎所有答案。

2 个答案:

答案 0 :(得分:1)

在Objective C上以无限模式运行计时器的代码

NSTimer  *timerRefresh;

 timerRefresh  = [NSTimer scheduledTimerWithTimeInterval:60.0 target:self selector:@selector(timerFired) userInfo:nil repeats:YES];

-(void) timerFired{
}

答案 1 :(得分:1)

DispatchQueue.global(qos: .background).async {
                        while self.recording{
                            DispatchQueue.main.async {
                                print(":::> \(self.recorder?.currentTime)")
                            }
                            usleep(useconds_t(1e+6) / 30)    // sleep in milliseconds 30 fps
                        }
                    }
该死的!我自己找到了答案。同样的方法在这里工作。 sleep()函数将参数设置为Seconds,而是使用usleep()