首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为NSThread休眠

为NSThread休眠
EN

Stack Overflow用户
提问于 2012-08-16 19:35:23
回答 1查看 1.1K关注 0票数 1

当NSStream连接失败或出现流错误并在休眠后尝试重新连接时,我尝试在以下代码中使用休眠。休眠工作,但它使整个应用程序进入休眠状态。

我已经将NSStream作为线程启动,但是当接收到NSStreamEvent时,handleEvent似乎正在作为同步方法工作。

对使用睡眠来编写这段代码有什么想法吗?我只想让睡眠只对Stream Thread起作用。

代码语言:javascript
复制
- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)event 
{
        case NSStreamEventErrorOccurred:
        {
            NSError *streamErr = [stream streamError];
            NSString *strErr = [streamErr localizedFailureReason];
            [self CloseStream];
            NSLog(@"Stream Error ::: %@",strErr);
            //[NSThread sleepForTimeInterval : 15];
            sleep(15);
            [self Initialize];
            [self OpenStream];
            break;
        }

        case NSStreamEventEndEncountered:
        {
            NSLog(@"Connection Closed by the Server");
            [self CloseStream];
            usleep(15000);
            [self Initialize];
            [self OpenStream];
            break;
        }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-16 19:50:24

您应该使用GCD (中央调度中心)。您的代码正在后台执行,并且您的应用程序不会冻结。

请阅读:GCD Reference

基本上,您创建一个队列并添加一个代码块,该代码块在后台执行。下面是我的代码示例

代码语言:javascript
复制
dispatch_queue_t backgroundQueue = dispatch_queue_create("some_identifier", NULL);
dispatch_async(backgroundQueue, ^(void) {   
        //do your background stuff

        dispatch_sync(dispatch_get_main_queue(), ^{
            //update the gui (if needed)
        });

    });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11986245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档