Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.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
Ios 如何使调度异步运行_Ios_Objective C_Grand Central Dispatch_Dispatch - Fatal编程技术网

Ios 如何使调度异步运行

Ios 如何使调度异步运行,ios,objective-c,grand-central-dispatch,dispatch,Ios,Objective C,Grand Central Dispatch,Dispatch,在下面的代码中,运行应用程序时,block变量中的日志 block1 永远不会被处决,只有 NSLog(@"Delay_Expired"); 请告诉我如何使调度异步运行 主要 假设main表示主启动函数,而您显示的代码是main的整个主体,那么: 一旦main返回,应用程序就会终止。因此,在您的情况下,block1可能开始执行,也可能不开始执行,但应用程序会很快终止 将行复制到标准GUI应用程序的ApplicationIDFinishLaunching:macOS或application:d

在下面的代码中,运行应用程序时,block变量中的日志

block1
永远不会被处决,只有

NSLog(@"Delay_Expired");
请告诉我如何使调度异步运行

主要

假设main表示主启动函数,而您显示的代码是main的整个主体,那么:

一旦main返回,应用程序就会终止。因此,在您的情况下,block1可能开始执行,也可能不开始执行,但应用程序会很快终止

将行复制到标准GUI应用程序的ApplicationIDFinishLaunching:macOS或application:didFinishLaunchingWithOptions:iOS方法中,然后运行该应用程序。GUI应用程序作为一个运行循环,在某个事件终止应用程序之前一直保持运行,因此您的应用程序将运行足够长的时间以执行block1。您可能希望将700更改为7以进行测试,或者您将等待很长时间以使其完成

HTH

假设main表示主启动功能,您显示的代码是main的整个主体,那么:

一旦main返回,应用程序就会终止。因此,在您的情况下,block1可能开始执行,也可能不开始执行,但应用程序会很快终止

将行复制到标准GUI应用程序的ApplicationIDFinishLaunching:macOS或application:didFinishLaunchingWithOptions:iOS方法中,然后运行该应用程序。GUI应用程序作为一个运行循环,在某个事件终止应用程序之前一直保持运行,因此您的应用程序将运行足够长的时间以执行block1。您可能希望将700更改为7以进行测试,或者您将等待很长时间以使其完成


HTH

它正在运行,但它是异步运行的,您只需在应用程序有机会完成之前退出即可。如果您在GUI应用程序中尝试此操作,该应用程序在用户手动退出之前保持活动状态,您将看到它的行为与您预期的一样

如果您在命令行应用程序中执行此操作,则可以使用调度组等待调度代码完成,例如:

dispatch_group_t group = dispatch_group_create();

dispatch_queue_t defaultPriority = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_group_async(group, defaultPriority, ^{
    for (int i = 0; i < 10; i++) {
        [NSThread sleepForTimeInterval:0.7];
        NSLog(@"current i = %d", i);
    }
});

NSLog(@"Waiting");

dispatch_group_wait(group, DISPATCH_TIME_FOREVER);

NSLog(@"All done");
在大多数GUI应用程序中通常不会这样做,但如果您真的希望命令行应用程序等待发送的代码完成,这将完成这项工作


顺便问一下,您知道它使用秒而不是毫秒吗?也许您打算使用0.7秒,而不是700秒?

它正在运行,但它是异步运行的,您只是在应用程序有机会完成之前退出它。如果您在GUI应用程序中尝试此操作,该应用程序在用户手动退出之前保持活动状态,您将看到它的行为与您预期的一样

如果您在命令行应用程序中执行此操作,则可以使用调度组等待调度代码完成,例如:

dispatch_group_t group = dispatch_group_create();

dispatch_queue_t defaultPriority = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_group_async(group, defaultPriority, ^{
    for (int i = 0; i < 10; i++) {
        [NSThread sleepForTimeInterval:0.7];
        NSLog(@"current i = %d", i);
    }
});

NSLog(@"Waiting");

dispatch_group_wait(group, DISPATCH_TIME_FOREVER);

NSLog(@"All done");
在大多数GUI应用程序中通常不会这样做,但如果您真的希望命令行应用程序等待发送的代码完成,这将完成这项工作

顺便问一下,您知道它使用秒而不是毫秒吗?也许你打算用0.7秒,而不是700秒