2

我一直在尝试在我的应用程序中实现一个后台线程来执行长途、硬移植上传的东西。

我正在使用 FBConnect SDK,它一直运行良好,但我想保持 GUI 端顺利运行,目前应用程序在开始上传之前有明显的暂停。

目前发生的事情是我将上传作业添加到队列中,然后运行“startQueue”。

这会从队列中取出第一个作业,调整图像大小并开始上传到 Facebook。

只有在发出 URL 请求时,它才开始在自己的线程中运行,并且我重新获得了 GUI 的控制权。

我想要的是能够将作业添加到队列中,然后在单独的线程中运行“startQueue”。这将立即让我重新控制 GUI。

发生的事情是我立即取回 GUI,图像在新线程中调整大小)并且 Facebook 上传开始(也在新线程中),但随后什么也没有。

在这个子线程中可以做什么和不可以做什么有某种限制吗?不允许 URL 连接吗?电话上似乎没有任何错误,我可以毫无问题地继续将作业添加到队列中,但初始上传没有完成。

init 方法创建线程...

bgThread = [[NSThread alloc] initWithTarget:self selector:@selector(startQueue) object:nil];

然后添加作业方法启动它......

[bgThread start];

然后这样运行......

-(void)startQueue
{
    running = TRUE;

    bgPool = [[NSAutoreleasePool alloc] init];

    [self startJob];
}

-(void)startJob
{
    NSDictionary *currentJob = [NSDictionary dictionaryWithDictionary:[jobQueue objectAtIndex:0]];
    NSArray *networks = [currentJob objectForKey:@"networks"];

    NSLog(@"Resizing image");

    NSLog(@"Starting Uploads");

    for (int i = 0; i < [networks count]; i++)
    {
        NSString *networkName = [networks objectAtIndex:i];

        if ([networkName isEqualToString:@"Facebook"])
        {
            NSLog(@"Facebook");
            currentUploads += 1;
            [self.fbDelegate uploadPhoto:uploadImage withCaption:[currentJob objectForKey:@"caption"]];
        }
    }
}

不使用线程(即只运行 startJob)它一切正常。当我调用 bgThread start 时,它运行完美,我得到了 Facebook NSLog,但工作永远不会完成。它甚至没有以错误结束。

感谢您提供的任何指示或提示!

奥利弗

4

0 回答 0