主线程(#1):解析参数,加载插件等.
Gui线程(#?):启动gui,处理事件等.它是gui线程.
Cocoa框架是非线程安全的,但强制执行一条规则,GUI必须在主线程上运行.断言用于检查这一点.为了试图解决这个问题,我自己实现了运行方法(下面的代码) – http://cocoawithlove.com/2009/01/demystifying-nsapplication-by.html – 指南.但我错过了一些东西.窗口打开,但保持空白(完全白色).虽然如果我在主线程中进行调用,它可以完美地工作.
所以基本上我需要弄清楚缺少什么.
- (voID)run{ NSautoreleasePool *pool = [[NSautoreleasePool alloc] init]; [self finishLaunching]; shouldKeepRunning = YES; do { [pool release]; pool = [[NSautoreleasePool alloc] init]; NSEvent *event = [self nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate distantFuture] inMode:NSDefaultRunLoopMode dequeue:YES]; [self sendEvent:event]; [self updatewindows]; } while (shouldKeepRunning); [pool release];}- (voID)terminate:(ID)sender{ shouldKeepRunning = NO;}解决方法 别.这种方法永远不会奏效.即使您修复了当前的问题(窗口没有绘制),您也会立即遇到另一个模糊的,无法解决的问题,另一个问题,另一个问题. Cocoa期望GUI线程成为主线程,故事结束. 总结
以上是内存溢出为你收集整理的objective-c – 在非主线程中运行Cocoa GUI全部内容,希望文章能够帮你解决objective-c – 在非主线程中运行Cocoa GUI所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)