【发布时间】:2013-10-24 01:07:07
【问题描述】:
我正在尝试编写一个代码,其中我必须创建 2 个并行线程(在调度串行队列中运行)1 个线程将上传,另一个线程将从服务器下载文件。上传和下载进度都将在另一个屏幕上更新,其中包含字节上传和下载。
但我遇到了一些奇怪的问题:-
一旦我创建了辅助线程,我的函数就会返回到调度串行队列,它会启动另一个已调度的串行任务,而不是先等待 2 个当前并行任务完成。
一旦下载线程开始上传线程停止上传文件并在写入服务器期间返回 -1。
我正在使用 Apple SimpleFTP 示例并尝试在 2 个并行线程中运行它,1 用于放置,第二用于获取。
知道为什么在从服务器下载文件时上传停止(我也与 FTP 服务器建立了 2 个不同的连接)
提前感谢您的帮助。
【问题讨论】:
-
你有什么理由不使用 GCD +
dispatch_semaphore_t变量的标准块? -
串行队列中发生的其他任务很少(一个接一个地完成),这些任务应该串行完成。这些串行队列是由 GCD 本身创建的。对于这个 FTP 任务,我们必须创建 2 个并行线程,并且上传和下载都应该同时运行。我尝试使用 GCD async 和全局 dispath 但不是等待任务完成,而是原来的主串行队列开始运行另一个任务..这是要求..
-
对此有更多更新.. 似乎 - (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode 正在阻止另一个线程访问另一个类中的相同委托函数,直到NSStream close 不会被调用。任何人都可以对此有所了解..
标签: iphone ios cocoa-touch ios5 ios6