工人线程iOS

m J*_*Jae 3 iphone multithreading objective-c ios

我想在iPhone上创建一个后台线程,每10毫秒执行一些代码.但在我再次迷失在并发编程指南和苹果的线程编程指南之前,我想问一下这里是否有人可以帮助我.我想做的事:

  • 创建后台工作线程
  • 每10毫秒触发一次方法的执行.(可能在该线程中使用NSTimer?)
  • 尽可能减少主应用程序线程的负载

在我的理解中NSThread,在子类中继承和编写我自己的main方法应该可以解决问题.这样我不会使用NSTimer更新间隔,但类似于:

[NSThread sleepForTimeInterval: 0.01];
Run Code Online (Sandbox Code Playgroud)

主线程和工作线程之间的排队机制也没有任何意义,因为工作线程应该反复执行相同的操作 - 直到停止.

问题是:如何配置线程使用计时器?我看不出我怎么能附加一个NSTimer工作线程Run Loop?

And*_*sen 11

可以使用您概述的方法执行此操作,但您是否已使用Grand Central Dispatch查看?它可以使一些更容易:

dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(backgroundQueue, ^{
    while ([self shouldKeepProcessingInBackground]) {
        [self doBackgroundWork];
        usleep(1e4);
    }
})
Run Code Online (Sandbox Code Playgroud)

您还可以使用计时器调度源定期执行工作:

dispatch_queue_t backgroundQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t timerSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, backgroundQueue);
dispatch_source_set_timer(timerSource, dispatch_time(DISPATCH_TIME_NOW, 0), 0.01*NSEC_PER_SEC, 0*NSEC_PER_SEC);
dispatch_source_set_event_handler(timerSource, ^{
    [self doBackgroundWork];
});
dispatch_resume(timerSource);
Run Code Online (Sandbox Code Playgroud)