可可 – NSTimer从未开始

我只是想在几秒钟的时间内关闭NSPanel,但是我不能让我的NSTimer开始.如果我明确地称之为火焰方法,它会发射,但它本身永远不会消失.这是我的代码:
- (void)startRemoveProgressTimer:(NSNotification *)notification {
    NSLog(@"timer should start");
    timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(removeProgress:) userInfo:nil repeats:NO];
}

- (void)removeProgress:(NSTimer *)timer {
    [progressPanel close];
}

我的代码中有一些线程.我认为这是什么让我的计时器乱了

-(void)incomingTextUpdateThread:(NSThread*)parentThread {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

//mark the thread as running
readThreadRunning = TRUE;

const int BUFFER_SIZE = 100;
char byte_buffer[BUFFER_SIZE]; //buffer for holding incoming data
int numBytes = 0; //number of bytes read
NSString *text; //incoming text from the serial port

[NSThread setThreadPriority:1.0];

//this will loop until the serial port closes
while (TRUE) {
    //read() blocks until some data is available or the port is closed
    numBytes = read(serialFileDescriptor,byte_buffer,BUFFER_SIZE);
    if(numBytes > 0) {
        //creat a string from the incoming bytes
        text = [[[NSString alloc] initWithBytes:byte_buffer length:numBytes encoding:[NSString defaultCStringEncoding]] autorelease];
        if(!([text rangeOfString:SEND_NEXT_COORDINATE].location == NSNotFound)) {
            //look for <next> to see if the next data should be sent
            if(coordinateNum <[coordinatesArray count]) {
                [self sendNextCoordinate]; //send coordinates
            }
            else {
                [self writeString:FINISH_COORDINATES_TRANSMIT]; //send <end> to mark transmission as complete
                NSNumber *total = [NSNumber numberWithUnsignedInteger:[coordinatesArray count]];
                NSDictionary *userInfo = [NSDictionary dictionaryWithObject:total forKey:@"progress"];
                [[NSNotificationCenter defaultCenter] postNotificationName:@"uploadProgressChange" object:self userInfo:userInfo]; //update progress bar to completed
            }


        }

        [self performSelectorOnMainThread:@selector(appendToIncomingText:) withObject:text waitUntilDone:YES]; //write incoming text to NSTextView
    } else {
        break; //Stop the thread if there is an error
    }
}

// make sure the serial port is closed
if (serialFileDescriptor != -1) {
    close(serialFileDescriptor);
    serialFileDescriptor = -1;
}

// mark that the thread has quit
readThreadRunning = FALSE;

// give back the pool
[pool release];
}

其他方法通过以下方式调用:[self performSelectorInBackground:@selector(incomingTextUpdateThread

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...