2013-02-11 3 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]; 

Он работает втирают, за исключением того, что сервер сокет нужен второй или так между операциями записи для того, чтобы работать, кроме , Мне было интересно, если кто-то столкнется с одной и той же проблемой и может пролить свет на то, как этого добиться. Благодарю.

ответ

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 секунды между выполнением WriteData без необходимости заморозить приложение и не заливая мое оборудование с записями.

1

Если вы хотите, чтобы клиент ждать от написания этих строк:

  • Поместите их в массив.
  • Использовать повторяющийся NSTimer
  • В обратном вызове таймера записывайте по одной строке за раз, пока массив не исчерпан, а затем недействителен таймер.
+0

Мне не хотелось иметь массив и отслеживать индекс, но это дало мне представление о том, как его исправить. Благодарю. – JoeGalind

+0

Пожалуйста, подумайте над этим, если это вам поможет. – paulmelnikow