iphone: sleepUntilDate против сна - PullRequest
       8

iphone: sleepUntilDate против сна

1 голос
/ 18 августа 2010

вот вопрос:

У меня есть 2 темы: основная и другая.

  • в главном потоке я выполняю все, что связано с GUI
  • в другой ветке я выполняю все свои вычисления

в некоторых операциях мне нужно на несколько секунд остановить второй поток, ожидая, что первый поток что-то сделает ....

мой вопрос:

какой вариант лучше и почему? находясь во второй теме ..

  1. использовать sleepUntilDate
  2. использовать функцию сна
  3. любой другой вариант?

псевдокод такой:

во второй теме:

... 
do some calculations
send the results to the first thread and wait for the # of seconds to wait (let's say K)
wait K seconds

1 Ответ

1 голос
/ 18 августа 2010

+[NSThread sleepForTimeInterval:] более вероятно сделает то, что вы хотите, если время внезапно изменится. Нахождение во второй теме не влияет на вещи.

Однако я не понимаю, почему второй поток вообще должен спать. Если вы хотите дождаться новых данных, используйте что-то вроде NSCondition или NSConditionLock, чтобы сигнализировать о поступлении данных.

В качестве альтернативы, не используйте потоки напрямую. Вы можете использовать NSOperation или executeSelectorInBackground: или dispatch_ *, чтобы назвать несколько.

РЕДАКТИРОВАТЬ: Вам нужно быть очень осторожным при написании традиционного кода синхронизации потоков, и вы должны быть такими же осторожными при каждом редактировании добавить новую функцию. У меня есть некоторый многопоточный код, о котором мне нужно подумать пару минут, чтобы понять, что происходит. Тупики не веселые.

...