sleep(),usleep()和amp;之间有什么区别? [NSThread sleepForTimeInterval:]?

时间:2010-07-01 06:42:38

标签: iphone objective-c cocoa

任何人都可以解释一下sleep(),usleep()& [NSThread sleepForTimeInterval:]?

使用这些方法的最佳条件是什么?

4 个答案:

答案 0 :(得分:26)

sleep(3)是一个posix标准库方法,它尝试在几秒钟内指定的时间内挂起调用线程。 usleep(3)做同样的事情,除了它需要一个微秒的时间。两者实际上都是通过nanosleep(2)系统调用实现的。

最后一个方法做了同样的事情,除了它是Foundation框架的一部分而不是C库调用。它需要一个NSTimeInterval来表示睡眠的时间量,表示秒和几分之一秒。

对于所有意图和目的,它们在功能上都是相同的,即尝试暂停调用线程一段指定的时间。

答案 1 :(得分:20)

  

使用的最佳条件是什么   这些方法?

从不

或者,实际上,几乎可以肯定的是,在最独特的情况之外,几乎没有。

你想做什么?

答案 2 :(得分:3)

在大多数操作系统上,sleep(0)及其变体可用于提高轮询情况下的效率,使其他线程有机会工作,直到线程调度程序决定唤醒轮询线程。它击败了一个完整的while循环。虽然我没有太多用于非零超时,特别是苹果公司在构建事件驱动架构方面做得非常好,无论如何都应该在大多数情况下消除轮询的需要。

答案 3 :(得分:-1)

- 示例睡眠用法处于以下状态:

网络模拟场景中,我们通常会使用调度程序逐个事件执行事件。调度程序以有序的方式执行事件。 当事件执行完毕,并且调度程序移动到下一个事件时,调度程序将下一个事件执行时间与机器时钟进行比较。如果下一个事件安排在将来的某个时间,模拟器会一直休眠,直到达到该实时,然后执行下一个事件。

- 从linux Man 页面:

usleep()函数暂停执行调用线程(至少)usec微秒。任何系统活动或处理呼叫所花费的时间或系统定时器的粒度都可以略微延长睡眠时间。 而睡眠延迟执行某个任务(可能是一个线程或任何东西)。有关这些函数的详细信息,请参阅12