objective-c – 在非主线程中运行Cocoa GUI

objective-c – 在非主线程中运行Cocoa GUI,第1张

概述我在开发cocoa用户界面时遇到了gui / threading问题.该应用程序的设计如下: 主线程(#1):解析参数,加载插件等. Gui线程(#?):启动gui,处理事件等.它是gui线程. Cocoa框架是非线程安全的,但强制执行一条规则,GUI必须在主线程上运行.断言用于检查这一点.为了试图解决这个问题,我自己实现了运行方法(下面的代码) – http://cocoawithlove.co 我在开发cocoa用户界面时遇到了gui / threading问题.该应用程序的设计如下:

主线程(#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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1031789.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存