Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSThread的睡眠_Objective C_Thread Sleep - Fatal编程技术网

Objective c NSThread的睡眠

Objective c NSThread的睡眠,objective-c,thread-sleep,Objective C,Thread Sleep,当NSStream连接失败或出现流错误并尝试在睡眠后重新连接时,我尝试在下面的代码中使用睡眠。Sleep正在工作,但它使整个应用程序处于休眠状态 我已经将NSStream作为一个线程启动,但是当收到nsstreamvent时,handleEvent似乎是一个同步方法 关于在这段代码中使用睡眠有什么想法吗。。?我只想让睡眠单独为流线程工作 - (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)event { ca

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

我已经将NSStream作为一个线程启动,但是当收到nsstreamvent时,handleEvent似乎是一个同步方法

关于在这段代码中使用睡眠有什么想法吗。。?我只想让睡眠单独为流线程工作

- (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;
        }
}
您应该使用GCD(中央大调度)。代码在后台执行,应用程序不会冻结

请阅读以下内容:

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

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)
        });

    });
您应该使用GCD(中央大调度)。代码在后台执行,应用程序不会冻结

请阅读以下内容:

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

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)
        });

    });

别忘了发送发布:)别忘了发送发布:)