我需要创建两个计时器。一个在UI线程上,另一个在后台线程上。这些计时器彼此独立。
我将使用的场景;我基本上需要这个来测试UI线程的响应性。 umer线程中的TImer在UI线程中每隔200ms更新lastUpdatedDatetime属性。还有一个后台线程,每200ms轮询一次lastupdatedDatetime属性。
有谁知道我怎么能实现这个目标?
答案 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延迟几秒钟。
这两个结合使你可以在线程之间来回走动。