2013-02-11 63 views
0

我有以下功能:CocoaAsyncSocket/GCDAsyncSocket添加队列写入之间的延迟

if (socket==nil) 
    socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; 
if (elBuffer==nil) 
    elBuffer = [[NSMutableData alloc] init]; 
} 

if ([socket isDisconnected]) { 
    NSError *err = nil; 
    [socket connectToHost:elControlador.ip onPort:9761 error:&err] 
} 

[socket writeData:@"A01" withTimeout:30 tag:1]; 
[socket writeData:@"A02" withTimeout:30 tag:1]; 
[socket writeData:@"A03" withTimeout:30 tag:1]; 
[socket writeData:@"A04" withTimeout:30 tag:1]; 
[socket writeData:@"A05" withTimeout:30 tag:1]; 
[socket readDataWithTimeout:30 buffer:elBuffer bufferOffset:0 maxLength:-1 tag:1]; 

它的工作原理prefectly,除了在插槽服务器需要写入它的工作之间的第二个左右的事实。我想知道是否有人遇到同样的问题,并可以阐明如何实现这一点。谢谢。

回答

1

我能得到这个使用工作如下:

int i=0; 
for(id aItem in aIDs) { 
    NSString *directCommand = [NSString stringWithFormat:@"A%@",aItem]; 
    [self performSelector:@selector(fSend:) withObject:directCommand afterDelay:(2.0*i)]; 
    i++; 
} 
[socket readDataWithTimeout:30 buffer:elBuffer bufferOffset:0 maxLength:-1 tag:1]; 

-(void)fSend : (NSString *)aCommand { 
    [socket writeData:aCommand withTimeout:30 tag:1]; 
} 

这使我不必冻结应用程序,并没有淹没我的装备与写入执行写数据之间的2秒。

1

如果你希望客户端写这些字符串之间等待:

  • 将它放到一个数组。
  • 使用重复NSTimer
  • 在定时器回调中,一次写入一行,直到数组耗尽,然后使定时器无效。
+0

我想避免拥有一个数组并追踪索引,但是它确实给了我一个如何解决它的想法。谢谢。 – JoeGalind 2013-02-21 12:41:52

+0

如果它对您有帮助,请考虑投票。 – paulmelnikow 2013-03-11 04:26:51