Ios 如何使调度异步运行
在下面的代码中,运行应用程序时,block变量中的日志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
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秒