【发布时间】:2015-10-03 13:27:49
【问题描述】:
我今天早些时候问了一个关于发送的问题 (find it here) 大数据到服务器,一个人评论说是后台任务 应该处理这项工作。
我假设他/她的意思是一个线程应该处理任务。
所以我现在的问题是:如何创建一个等待输入的线程?
该过程将如下所示:
- 主线程 (MT) 告诉工作线程 (WT) 加载资产
- WT 从资产中复制一大块数据并组装一个网络数据包
- WT发送网络包并等待
- WT 等待 MT 告诉它何时重复步骤 2 到 4
当数据传输完毕后,线程被销毁。
注意:我没有使用 HTTP,我在 TCP 之上使用带有自定义协议的 TCP。
解释: 我需要让线程等待的原因是,当我打开一个 200MB 或更大的非常大的资产时,加载资产需要一些时间。
资产数据越大,应用等待的时间越长。
如果我只想要一个 2MB 的资源块,我必须加载资源,等待一段时间让它加载,复制一个 2MB 的块,然后退出完成块。
然后我发送数据,等待服务器发送ACK信号,重复这个过程。
这需要一些时间,并且网络活动显示应用程序在几秒钟内没有执行任何操作,这完全是因为加载资产需要时间。
我上一个问题中的人说,最好将资产加载到后台任务中,而不是离开requestImageForAsset 的完成块,并简单地保持任务运行直到发送块,然后发送下一个块.
我希望这能消除任何进一步的困惑。
【问题讨论】:
-
不确定您的等待和分块逻辑,但如果您不需要非常低级别的控制,我建议
NSOperationQueue是一个有用的线程抽象。 -
@PhillipMills 如果您愿意,我可以准确地解释我在做什么。我真的不需要任何低级的东西。我只需要一个沿着主线程运行并保持活动状态的任务,直到主线程告诉它做某事。
标签: ios multithreading wait