2015-03-06 5 views
0

В iOS env, возможно ли сделать текущий поток спящим в течение нескольких секунд, а затем выполнить мой код? NSTimer, GDC или любая техника в порядке для меня.iOS: Как сделать нить сна в течение нескольких секунд?

+1

Что вы пробовали? Пожалуйста, поделитесь кодом, который вы уже пробовали. Также вы попробовали что-то простое, как 'sleep (2);' или '[NSThread sleepForTimeInterval: 2000]'? – Popeye

+0

Что вам нужно для достижения? –

+0

@flexaddicted Я не вижу в нем прямого дубликата * этого *. Судя по тегам, используемым ** Opart Code **, он, похоже, никак не ссылается на Java. Возможно, он даже не знает Java, и не стал бы искать эту информацию таким образом. Но, конечно, дублируйте это, есть куча вопросов вроде этого на SO ... – Michal

ответ

13

Было бы лучше, если бы вы поделились тем, что вы сделали, но здесь вы идете.

Есть несколько вариантов, вы можете пойти с:

Вариант 1

// Standard Unix calls 
sleep(); 
usleep(); 

Некоторая документация относительно функции sleep можно найти here. Вы обнаружите, что они фактически являются функциями C, но с Objective-C является строгим надмножеством C, мы все еще можем использовать функции sleep и usleep.

Вариант 2

[NSThread sleepForTimeInterval:2.000];//2 seconds 

Apple documentation для этого метода состояний:

Спит нить для заданного временного интервала.

Обсуждение обработка петли

Нет запуска происходит в то время как поток блокируется.

Вариант 3

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 
           1 * NSEC_PER_SEC), 
       dispatch_get_main_queue(), 
       ^{ 
        // Do whatever you want here. 
       }); 

Grand Central Dispatch маршрут очень хороший способ делать вещи. Вот документация Apple для Grand Central Dispatch, которая довольно хорошо читается.

Существует также этот вопрос, который может быть очень полезным How to Wait in Objective-C

+1

Я считаю, что метод dispatch_after - это то, что я хочу. Благодарю. –

+0

Вариант 2 останавливает систему –

+0

Есть ли какое-либо требование на SO, чтобы «отправить свой код»? – NSTJ

3

не может быть проще.

sleep(seconds); 
+0

Спасибо за комментарий, Похоже, что API уровня системы останавливает текущий поток. Во всяком случае, это работает для моей ситуации. –

+1

Почему бы и нет? Если ответ действительно прост, я не знаю ... что вы ожидаете? –

1

Либо

[self performSelector:@selector(YourFunctionName) withObject:(can be Self or Object from other Classes) afterDelay:(Time Of Delay)];` 

или

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), 
    dispatch_get_main_queue(), ^{ 
    //your method 
}); 
0

Используйте метод класса + (void)sleepForTimeInterval:(NSTimeInterval)ti

Переменная NSTimeInterval имеет тип двойной и представляет количество секунд спать

// Block for .5 seconds 
[NSThread sleepForTimeInterval:.5]; 
+2

Swift 4.0: Thread.sleep (forTimeInterval: 0.5) –

1

это зависит от того, как вы создаете (нерест) свои темы. Например, если вы создаете свою нить с NSThread класса, вы можете использовать два метода класса:

sleepUntilDate: 
sleepForTimeInterval: 

Но в целом это плохая идея, чтобы справиться управлении РЕЗЬБОНАРЕЗАНИЕ себя, потому что многопоточного программирования очень трудно. Например, вы можете использовать GCD или операционные очереди для обработки многопоточности в своем приложении.

Смежные вопросы