Запустите код на определенное время и при необходимости убейте - PullRequest
0 голосов
/ 23 февраля 2010

Я использую скрипт-мост для запроса iTunes из моего приложения какао. Иногда iTunes выскакивает окно (например, если iPod нуждается в обновлении и т. Д.), И пока это всплывающее окно открыто, я не могу получить информацию из iTunes. Поэтому, если я запрашиваю информацию из iTunes, когда он находится в этом состоянии, мое приложение полностью блокируется до тех пор, пока это всплывающее окно не будет закрыто.

Так что мне нужен какой-то механизм, где я могу задать itunes что-то простое в отдельном потоке, чтобы посмотреть, смогу ли я получить от него ответ ... и если этот отдельный поток не получит ответ в течение короткого периода время, когда мой основной поток просто уничтожит этот поток и, следовательно, не будет запрашивать itunes в это конкретное время.

Есть идеи, как создать такой механизм? Я искал способы убить поток, но не нашел ни одного.

Ответы [ 2 ]

1 голос
/ 25 февраля 2010

Ваша проблема не имеет ничего общего с потоками; это то, что ваш тайм-аут слишком длинный. Все, что ты делаешь, должно потерпеть неудачу примерно через минуту.

Чтобы это исправить, отправьте setTimeout: сообщение объекту SBApplication , указав время ожидания. Значение указывается в тиках, которых ровно 60 в секунду.

(В некоторых источниках написано 60,15, а в собственных документах Apple написано «приблизительно» 60, но я только что измерил десятиминутное значение TickCount, а результат деления на 600 секунд составляет ровно 60,0.
NSLog(@"Ticks per second: %f", (end - start) / (60.0 * numMinutes));, где end и start являются результатами от TickCount.)

0 голосов
/ 23 февраля 2010

Проверьте NSOperation / NSOperationQueue.

...