代码之家  ›  专栏  ›  技术社区  ›  Enrico Susatyo

Objective-C中的线程编程,用于向web服务器发送请求

  •  1
  • Enrico Susatyo  · 技术社区  · 14 年前

    我正处于这种情况。。。我想修补100个不同的web请求,但它分为三个不同的功能:

    -(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 回复  |  直到 14 年前
        1
  •  1
  •   willcodejavaforfood    14 年前

    可能我没有在这里跟踪您,但是如果您希望它们一个接一个地发生,您应该在 NSURLConnection .

    + sendSynchronousRequest:returningResponse:error: