我正在尝试启动支持应用程序的列表。然后,我必须等到这些应用程序完成启动后再继续执行代码。以下是我现在所拥有的:启动外部应用程序并等待它们启动
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
int i = 0;
while (i < [launchApps count]) {
[ws launcApplication: [launchApps objectAtIndex: i]];
++i
}
while (![self appsFinishedLaunching]) {
NSLog(@"loop");
sleep(1);
}
再后来:
- (BOOL)appsFinishedLaunching
{
BOOL doneLaunching = NO;
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int i = 0;
while (i < [launchApps count]) {
NSWorkspace *nws = [NSWorkspace sharedWorkspace];
NSArray *runningApps = [NSArray arrayWithArray:[nws runningApplications]];
for (NSRunningApplication *app in runningApps) {
if ([[app localizedName] isEqualToString:[launchApps objectAtIndex:i]]) {
if ([app isFinishedLaunching]) {
[launchApps removeObjectAtIndex:i];
break;
}
}
}
++i;
}
if ([launchApps count] == 0)
doneLaunching = YES;
[pool drain];
return doneLaunching;
}
如果我跑手动打开launchApps所有的应用程序我控制台中看到一个“循环”,一切都很好。如果我运行此代码并让它启动应用程序,它会进入无限循环。看起来我的共享工作区中的NSRunningApplications对象没有被更新,我不知道为什么。我错过了什么?
你正在为他们“等待”或“吃东西”吗?标题有点有趣。 – Blender
错别字,对不起!感谢克里斯的编辑:) – Kris