1

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

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

有谁知道我怎样才能做到这一点?

4

2 回答 2

1

NSTimer 的重点是能够安排在线程(通常是主线程)上运行的东西,同时它正在处理运行循环上的其他事件。如果您想要在后台线程上做的只是每 200 毫秒轮询一次,那么不使用 NSTimer 而只是让后台线程休眠要容易得多。因此,像往常一样在主线程和后台线程上设置一个 NSTimer 执行以下操作:

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

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

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

于 2012-07-16T22:47:44.560 回答
0

查看 dispatch_async 和 dispatch_after

dispatch_async 会让你触发对另一个线程的调用,这就是我用来做主线程更改的方法。

dispatch_after 会让你延迟 dispatch_async 几秒钟。

这两者结合起来会让你在线程之间来回走动。

这是Grand Central Dispatch上的文件

于 2012-07-16T22:39:04.040 回答