工作线程iOS[英] Worker Thread iOS

本文是小编为大家收集整理的关于工作线程iOS的处理方法,想解了工作线程iOS的问题怎么解决?工作线程iOS问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

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

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

据我了解,子类化 NSThread 并在该子类中编写我自己的 main 方法应该可以解决问题.这样我就不会使用 NSTimer 作为更新间隔,而是使用类似:

[NSThread sleepForTimeInterval: 0.01];

此外,主线程和工作线程之间的排队机制没有任何意义,因为工作线程应该一遍又一遍地执行相同的操作 - 直到停止.

问题是:如何配置线程以使用计时器?我看不到如何将 NSTimer 附加到该工作线程 Run Loop?

推荐答案

使用您概述的方法可以做到这一点,但是您是否考虑过使用 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);
    }
})

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

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);

本文地址:https://www.itbaoku.cn/post/924380.html