微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用Swift在自定义线程中运行Timer

如何解决如何使用Swift在自定义线程中运行Timer

我必须完成一个简单的任务-具有两个按钮和三个踏板的Singleview应用-

  1. 开始按钮:

1a)创建线程T1-每3.0重复收集一次设备的GPS位置 秒,然后将结果(作为字符串)移交给T3。

1b)创建w线程T2-收集设备电池的使用百分比 每B秒重复一次,并将结果(作为字符串)移交给T3。

1c)在线程T3中,应将来自T1和T2的数据存储在数组中,并在x数据多的情况下执行操作。

  1. 停止按钮-只需停止所有三个线程

我对iOS线程一无所知。

  1. 您如何看待,我该怎么用-DCG,例如:DCG embed in DispatchWorkItem

  2. 我应该在ViewController中创建线程吗?还是我应该在模型部分中构建某种线程管理器?

  3. 如何在线程之间进行通信-我应该在T3中创建一种侦听器吗?

  4. 现在我有这样的东西,但是它不起作用。

    DECLARE @cnt INT = 2018; --if 2018 is start year
    
    WHILE @cnt < 2020  --if 2020 is ending year
    BEGIN
    --hear check how many meeting he did based on your database
    SET @cnt = @cnt + 1;
    END;
    

为什么线程启动后什么也没打印?

请问这4个问题,并给我任何建议(出了什么问题),更笼统地说-我该怎么做?

解决方法

对该问题的简短回答是“不要以这种方式使用Thread”。 (非常轻微)更长的答案是,Timer依赖RunLoops,并且您创建了一个没有RunLoop的线程,并且在创建线程后就立即销毁了它。但是无论如何,您都不应该这样使用Thread。实际上,您几乎不应该在iOS开发中使用Thread。

您描述的问题不需要这样的东西。但是,如果您发现确实需要线程的地方,请先阅读Apple的Migrating Away From Threads

如果最后您确实确实需要一个Thread,那么您需要研究Thread的文档。此处几乎每一行代码都是错误的,因此,首先阅读文档然后提出一个新问题,而不是全部纠正它们。这不是启动线程的方式,不是停止线程的方式,也不是定时器的工作方式。 (该API并不明显,所以我理解您为什么用这种方式编写它。这根本不是您想要的。)

仅通过响应位置管理器的委托回调来处理您所描述的位置更新方法。如果您真的需要定期检查,则只需使用标准计时器。不需要DispatchQueues,Threads或其他任何东西。计时器完成所有工作(它使用RunLoop)。

类似地,不应使用计时器来监视电池。您要打开UIDevice.isBatteryMonitoringEnabled,然后收听通知。如果您需要轮询,那么再次需要一个简单的计时器。

只要情况允许,您都希望系统在发生变化时给您打电话。如果发现自己在轮询某些内容,则通常是在做错了事。但是当您确实需要轮询时,Timer是最常见和最简单的工具。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?