Obj-C:检查线程中是否存在窗口

时间:2013-03-20 18:05:47

标签: objective-c nswindow nsthread

他,当我点击主窗口中的按钮时,我以编程方式在线程中创建一个窗口。如果再次单击此按钮,则窗口将关闭。精细。但是当用户通过其关闭按钮关闭窗口时,线程不会意识到这一点,正在运行。如果用户单击主窗口中的按钮,则线程正在尝试关闭窗口并且应用程序正在崩溃。所以我需要在线程内检查窗口是否存在。怎么做?感谢

-(void)prefsWindow:(id)sender {
    NSRect frame = NSMakeRect(200, 200, 640, 480);
    NSWindow *pwindow  = [[NSWindow alloc] initWithContentRect:frame
                                                     styleMask:NSTitledWindowMask 
                                                       backing:NSBackingStoreBuffered
                                                         defer:NO];
    [pwindow center];
    [pwindow makeKeyAndOrderFront:NSApp];
    while (prefsA==1) {

        usleep(250000);}
    [pwindow close];
    [NSThread exit];
}

1 个答案:

答案 0 :(得分:4)

此代码有很多问题。

首先,不要从线程创建窗口。除非将NSWindow明确记录为线程安全,否则不能在线程中使用它。

其次,你不应该用sleep()进行轮询。

最后,没有理由为这样的窗口创建一个线程。