iphone SDK общаться между потоками - PullRequest
0 голосов
/ 23 января 2011

У моего приложения есть второй запущенный поток. Мне нужно добиться следующего:

  • Изящно остановите отдельный поток из основного потока приложения
  • Вызвать функцию в главном потоке из второго потока, чтобы сообщить о найденном результате, и передать его основному.

Я нашел следующее для первой задачи: разделить глобальную переменную между двумя потоками? Не знаю, как решить вторую задачу. (NSNotificationCenter не позволяет передавать объекты ...)

Я завтракаю во второй ветке вот так [NSThread detachNewThreadSelector:@selector(backGroudTask) toTarget:self withObject:nil];

Спасибо

Ответы [ 2 ]

1 голос
/ 23 января 2011

Я все еще ищу лучший ответ на этот вопрос, но вот что я делаю:

Используйте NSLock для создания блокировки, которая не позволяет мне получить доступ к одной и той же переменной в обоих потоках.Затем используйте BOOL, чтобы увидеть, хочет ли главный поток инициировать остановку.

в главном потоке:


[myLock lock];
exitFlag = YES;
[myLock unlock];

, в другом потоке:

endMe = NO;

while(!endMe)
{
  // do your task stuff

  [myLock lock];
  endMe = exitFlag;
  [myLock unlock];
}
* 1010.* Для второй части вашего вопроса используйте следующее:
[self performSelectorOnMainThread:@selector(your_selector_name) withObject:nil waitUntilDone:false];

Это приведет к тому, что подпрограмма выбора будет выполняться в главном потоке.

Надеюсь, это поможет

1 голос
/ 23 января 2011

(NSNotificationCenter не позволяет передавать объекты ...)

это так, но вы должны добавить их в userinfo уведомления

NSDictionary *userInfo = [NSDictionary dictionaryWithObject:myObject forKey:@"object"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"myNotification" object:self userInfo:userInfo];

- (void)foo:(NSNotification *)notification {
    id object = [[notification userInfo] objectForKey:@"object"];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...