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

如何在iOS的后台线程中创建计时器,ios,multithreading,background,nstimer,Ios,Multithreading,Background,Nstimer,我需要创建两个计时器。一个在UI线程上,另一个在后台线程上。这些计时器相互独立 我将使用的场景;我基本上需要这个来测试UI线程的响应性。uI线程中的计时器在uI线程中每隔200ms更新LastUpdateDateTime属性。还有一个后台线程每200ms轮询一次LastUpdateDateTime属性 有人知道我如何才能做到这一点吗?查看异步调度和之后的调度 dispatch_async将允许您启动对另一个线程的调用,这就是我用来更改主线程的方法 dispatch\u after将允许您将dis

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

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


有人知道我如何才能做到这一点吗?

查看异步调度和之后的调度

dispatch_async将允许您启动对另一个线程的调用,这就是我用来更改主线程的方法

dispatch\u after将允许您将dispatch\u async延迟数秒

这两个结合在一起可以让您在线程之间来回移动


查看异步调度和之后的调度

dispatch_async将允许您启动对另一个线程的调用,这就是我用来更改主线程的方法

dispatch\u after将允许您将dispatch\u async延迟数秒

这两个结合在一起可以让您在线程之间来回移动


NSTimer的要点是能够在线程(通常是主线程)处理运行循环上的其他事件时,安排在线程上运行的内容。如果您希望在后台线程上执行的所有操作都是每200毫秒轮询一次,那么不使用NSTimer而只休眠后台线程就容易得多。因此,像往常一样在主线程和后台线程上设置NSTimer,执行如下操作:

while (stillRunning) {
    usleep(200*1000);
    // Do something with lastUpdatedDatetime
}
这种技术浪费了线程,但对于测试目的来说,它可能比使用Grand Central Dispatch更具确定性


请记住,如果LastUpdateDateTime是NSDate,则应将其设置为原子属性,以便在后台线程上访问它时,您一定会收到有效的对象。

NSTimer的要点是能够在线程(通常是主线程)处理运行循环上的其他事件时,安排在线程上运行的内容。如果您希望在后台线程上执行的所有操作都是每200毫秒轮询一次,那么不使用NSTimer而只休眠后台线程就容易得多。因此,像往常一样在主线程和后台线程上设置NSTimer,执行如下操作:

while (stillRunning) {
    usleep(200*1000);
    // Do something with lastUpdatedDatetime
}
这种技术浪费了线程,但对于测试目的来说,它可能比使用Grand Central Dispatch更具确定性


请记住,如果LastUpdateDateTime是NSDate,则应将其设置为原子属性,以便在后台线程上访问它时,您一定会收到有效的对象。

我认为您的问题与此类似:我认为您的问题与此类似: