我使用“SimpleFTPSample”来执行ftp请求以列出有关信息。该部分代码如下:如何等待ftp请求完成,然后继续执行程序
- (void)_startReceive
{
......
self.networkStream = (NSInputStream *) ftpStream;
self.networkStream.delegate = self;
[self.networkStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[NSTimer scheduledTimerWithTimeInterval:TIMEOUTFTP target:self
selector:@selector(dealTimeOut:) userInfo:nil repeats:NO];
......
}
我还设置了的NSTimer TIMEOUTFTP后停止的NetworkStream中,也的NetworkStream将被关闭,如果该请求被内TIMEOUTFTP我定义正确完成。我使用的方法在另一个地方是这样的:
- (void)downLoadData
{
NSArray* receivedData;
[ftpService _startReceive];
//wait until the network is closed
while (ftpService.isReceiving) {}
receivedData = ftpService.dataArray;
if([receivedData count] == 0) {
NSLog(@"no data get");
}
else {
NSLog(@"get data number %d", [receivedData count]);
}
}
的情况是,该计划停留在 “一段时间(ftpService.isReceiving){}”。我不熟悉Multiple Thread。可能是我不正确地理解运行循环。有人能告诉我为什么会发生这种情况,以及如何达到我的目的?
谢谢!你的代码做的话。但我不明白你想告诉我什么。我想我应该更多地了解运行循环。 – itenyh
实际上,这是在第二个线程从服务器加载数据。这样做会导致可怕的结果吗? – itenyh
在后台线程上,可以阻止等待数据。你可以使用我展示的代码。 (通常不需要使用单独的线程,因为API支持异步使用,但是没问题。)如果您想了解有关运行循环的更多信息,请参阅[Apple的文档](https://developer.apple.com/library /ios/#documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html)。 –