CocoaAsyncSocket / GCDAsyncSocket在队列上的写入之间添加延迟

时间:2013-02-11 14:19:24

标签: queue delay 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];

它完美地工作,除了套接字服务器在写入之间需要一秒左右才能工作。我想知道是否有人遇到同样的问题,并且可以阐明如何实现这一目标。感谢。

2 个答案:

答案 0 :(得分:1)

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

  • 将它们放入数组中。
  • 使用重复的NSTimer
  • 在计时器回调中,一次写一行直到阵列耗尽,然后使计时器无效。

答案 1 :(得分: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];
}

这使我在执行writeData之间有2秒的时间,而不必冻结应用程序,也不会使我的设备充满写入。