如何在iOS中的后台线程中创建计时器

时间:2012-07-16 22:28:10

标签: ios multithreading background nstimer

我需要创建两个计时器。一个在UI线程上,另一个在后台线程上。这些计时器彼此独立。

我将使用的场景;我基本上需要这个来测试UI线程的响应性。 umer线程中的TImer在UI线程中每隔200ms更新lastUpdatedDatetime属性。还有一个后台线程,每200ms轮询一次lastupdatedDatetime属性。

有谁知道我怎么能实现这个目标?

2 个答案:

答案 0 :(得分:1)

NSTimer的目的是能够在一个线程(通常是主线程)上调度要运行的东西,同时处理运行循环中的其他事件。如果你想在后台线程上做的就是每200毫秒轮询一次,那么不使用NSTimer就好了,而只是睡觉后台线程。因此,在主线程和后台线程上像往常一样设置NSTimer,执行以下操作:

while (stillRunning) {
    usleep(200*1000);
    // Do something with lastUpdatedDatetime
}

这种技术浪费了一个线程,但对于测试目的而言可能比使用Grand Central Dispatch更具确定性。

请记住,如果lastUpdatedDatetime是一个NSDate,它应该被设置为原子属性,这样当你在后台线程上访问它时,你肯定会收到一个有效的对象。

答案 1 :(得分:0)

查看dispatch_async和dispatch_after

dispatch_async将允许你激活对另一个线程的调用,这是我用来做主线程更改的。

dispatch_after会让你将dispatch_async延迟几秒钟。

这两个结合使你可以在线程之间来回走动。

here is the documents on Grand Central Dispatch