Потоковое программирование в Objective-C, для отправки запроса на веб-сервер - PullRequest
1 голос
/ 26 ноября 2010

Я нахожусь в такой ситуации ... Я хочу пропатчить 100 различных веб-запросов, но они разделены на три разные функции:

-(void)functionMain {
    for(int i = 0; i < 100; i++)
        [self sendRequestToServer];
}

Так что первая функция в основном отправит запрос некоторымURL и дождитесь его завершения ...

-(void)sendRequestToServer {
    [request sendRequest:mAddress];
    [request didFinishSelector:@"refreshAddress"];
    [request startAsynchronous];
}

Эта функция выше будет выполнять фактическую отправку адреса.

-(void)refreshAddress {
    NSString *result = [request getResponse];
    mAddress = [result getTheNextAddress];
    [self refreshDisplay];
}

Теперь это установит mAddress на следующий веб-адрес,Итак, я получил много этого, и, очевидно, один запрос занимает немного времени (около 600 мс), но если вы заметите в основном цикле в functionMain, у меня нет никакого механизма, чтобы увидеть, имеет ли refreshAddressзакончил свою работу, потому что если этого не произошло, то я буду отправлять запрос с одним и тем же адресом снова и снова.

Я пытался использовать логическую переменную для защиты цикла, но он не выглядиткак будто это работает ... Есть ли изящный способ сделать это?Я не уверен, что я должен искать .. Я не знаю, помогут ли мне NSOperation или NSThread.

РЕДАКТИРОВАТЬ: Как я уже упоминал в комментарии, это, вероятно, больше похоже на меняУ меня здесь ситуация с многопоточностью (точнее, это может быть 100 потоков), которую я хочу превратить в один поток.

РЕДАКТИРОВАТЬ: Итак, что я действительно хочу, так это (предположим, циклтолько 3):

functionMain(i = 0) -> 
sendRequestToServer

Затем мы ждем, пока это не закончится, тогда у нас есть это:

refreshAddress (mAddress has been set to something else now) -> 
functionMain (i = 1) -> 
sendRequestToServer

Еще раз:

refreshAddress (mAddress has been set to something else now) -> 
functionMain (i = 2, finished)

Очень, очень жальесли я не могу описать проблему более четко ... Я бы хотел лучше писать по-английски и описывать вещи более четко!

1 Ответ

1 голос
/ 26 ноября 2010

Возможно, я здесь не за вами, но если вы хотите, чтобы они происходили один за другим, вы должны использовать синхронный запрос в NSURLConnection .

+ sendSynchronousRequest:returningResponse:error:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...