1

新しいスレッドで関数を呼び出す多くの方法を試した後、以下のコードのみが機能しました

[NSThread detacNewThreadSelector:@selector(temp:) toTarget:self withObject:self];

以下は機能しませんでした:

NSThread *updateThread1 = [[NSThread alloc] initWithTarget:self selector:@selector(temp:) object:self];
NSThread *updateThread1 = [[NSThread alloc] init];
  [self performSelector:@selector(temp:) onThread:updateThread1 withObject:self waitUntilDone:YES];

NSTimer関数でセレクターを呼び出したり実行したりしようとすると、timer:機能しません コードの下を検索します

int timeOutflag1 = 0;
-(void)connectCheckTimeOut
{
    NSLog(@"timeout");
    timeOutflag1 = 1;
}

-(void)temp:(id)selfptr
{
    //[selfptr connectCheckTimeOut];
    NSLog(@"temp");
    //[NSTimer scheduledTimerWithTimeInterval:5 target:selfptr selector:@selector(connectCheckTimeOut) userInfo:nil repeats:NO];
    [selfptr performSelector:@selector(connectCheckTimeOut) withObject:nil afterDelay:5];

}

- (IBAction)onUart:(id)sender {

    protocolDemo1 *prtDemo = [[protocolDemo1 alloc] init];

   //NSThread *updateThread1 = [[NSThread alloc] initWithTarget:self selector:@selector(temp:) object:self];
    //[self performSelector:@selector(temp:) onThread:updateThread1 withObject:self waitUntilDone:YES];
      // [updateThread1 start];
    [self performSelector:@selector(temp:) withObject:self afterDelay:0];

   while(1)
    {
        NSLog(@"Whieloop");
        if(timeOutflag1)
        {
            timeOutflag1 = 0;
            break;
        }
        if([prtDemo isConnected])
            break;

    }
}

関数で使用する[self performSelector:@selector(connectCheckTimeOut) withObject:nil afterDelay:5]; と正常に動作しますが、一時的には動作しません。onUartTimeout printf

4

1 に答える 1

1

NSTimerは実行ループ ベースであるため、生成して自分で管理しているバックグラウンド スレッドで使用する場合は、そのスレッドで実行ループを開始する必要があります。を読んでくださいNSRunLoop。短いバージョンは次のようになります。

- (void)timedMethod
{
    NSLog(@"Timer fired!");
}

- (void)threadMain
{
    NSRunLoop* rl = [NSRunLoop currentRunLoop];
    NSTimer* t = [NSTimer scheduledTimerWithTimeInterval: 1.0 target: self selector: @selector(timedMethod) userInfo:nil repeats:YES];
    [rl run];
}

- (void)spawnThread
{
    [NSThread detachNewThreadSelector: @selector(threadMain) toTarget:self withObject:nil];
}
于 2013-09-16T11:51:02.163 に答える