0

彼は、メイン ウィンドウのボタンがクリックされると、スレッド内にプログラムでウィンドウを作成します。このボタンをもう一度クリックすると、ウィンドウが閉じます。罰金。しかし、ユーザーが閉じるボタンを使用してウィンドウを閉じると、スレッドはそれを認識せずに実行されます。ユーザーがメイン ウィンドウのボタンをクリックすると、スレッドがウィンドウを閉じようとし、アプリがクラッシュします。そのため、ウィンドウが存在するかどうかをスレッド内で確認する必要があります。どうやってするか?ありがとう

-(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];
}
4

1 に答える 1

4

このコードには多くの問題があります。

まず、スレッドからウィンドウを作成しないでください。NSWindowがスレッドセーフとして明示的に文書化されていない限り、スレッドから使​​用することはできません。

次に、sleep()でポーリングしないでください。

最後に、このようなウィンドウのスレッドを作成する理由はありません。

于 2013-03-20T18:29:03.457 に答える