Темы в Objective C - PullRequest
       2

Темы в Objective C

0 голосов
/ 01 июня 2011
-(void)startThread {

m_bRunThread = YES;  

    if(m_bRunThread) {

        NSThread* myThread = [[NSThread alloc]initWithTarget:self selector:@selector(display) object:theConditionLock];
        [myThread start];

        /*((WaitForSingleobject(event,1500) != WAIT_OBJECT_O) || !m_bRunThread) {

        m_bRunThread = false;
        Trace(_T("Unable to start display Thread\n"));
        }*/

        }
        [self insert];
    }

    -(void)insert {

        [theConditionLock lockWhenCondition:LOCK];
        NSLog(@"I'm into insert function of thread!");
        [theConditionLock unlockWithCondition:UNLOCK];
    }

    -(void)display {

        NSLog(@"I'm into display function");

            while (YES) {
                [theConditionLock lockWhenCondition:LOCK];
                NSAutoreleasePool* pool1 = [[NSAutoreleasePool alloc]init];
                NSLog(@"Into the lock");
                [theConditionLock unlockWithCondition:UNLOCK];
                [pool1 drain];
            }
    }

Как метод вставки, так и методы отображения вызываются из startThread.display вызывается до вызова метода вставки. Но я хочу, чтобы дисплей дождался завершения выполнения вставки. И остановил ли он сигналдолжен быть отправлен в начальный поток для отображения сообщения об ошибке.

Как это сделать.

Но в приведенном выше коде сначала вызывается метод display, и он продолжается в бесконечном цикле.

Ответы [ 2 ]

0 голосов
/ 01 июня 2011

вы можете попробовать: performSelector:onThread:withObject:waitUntilDone: на self

Насколько я понимаю, вы хотите синхронизировать потоки вставки и отображения, так что отображение вызывается после вставки (startThread), и сообщать о вставке (startThread) (не уверен, правильно ли я понял). Если я правильно это сделаю, что-то вроде этого должно сработать (не проверено, возможно, потребуются небольшие изменения):

    [self insert];
     NSThread* myThread = [[NSThread alloc] init];
     [self performSelector:@selector(display) onThread:myThread withObject:nil waitUntilDone:YES];
    //myThread stopped, check its return status (maybe set some variables) and display error message

это был бы другой способ:

    m_bRunThread = YES;     
    [self insert];
            if(m_bRunThread)
    {
     NSThread* myThread = [[NSThread alloc]initWithTarget:self selector:@selector(display) object:theConditionLock];
     [myThread start];
    }
    while(m_bRunThread){//check if display is still running
        [NSThread sleepForTimeInterval:0.5];
    }
    //display thread stopped
0 голосов
/ 01 июня 2011

Если вы хотите вызвать вставку перед отображением, просто переместите ее над вызовом, чтобы начать цепочку.

        m_bRunThread = YES;     
        [self insert];
        if(m_bRunThread)
        {
         NSThread* myThread = [[NSThread alloc]initWithTarget:self selector:@selector(display) object:theConditionLock];
         [myThread start];

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...