m J*_*Jae 3 iphone multithreading objective-c ios
我想在iPhone上创建一个后台线程,每10毫秒执行一些代码.但在我再次迷失在并发编程指南和苹果的线程编程指南之前,我想问一下这里是否有人可以帮助我.我想做的事:
在我的理解中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)
| 归档时间: |
|
| 查看次数: |
7126 次 |
| 最近记录: |