sleep()适用于iOS而不适用于mac?

时间:2012-01-14 18:52:22

标签: ios cocoa-touch cocoa grand-central-dispatch

我对辅助线程进行了dispatch_async调用,仅出于测试目的,我想让辅助线程休眠5秒钟。 这是代码:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  sleep(5);
});

当我在Mac OSX Lion 10.7.2上测试时,sleep()函数不会让线程进入休眠状态。在iPhone模拟器上使用相同的代码。

在mac上,sleep在主线程上工作,而在辅助线程上使用[NSThread sleepUntilTimeInterval:]也可以工作。

为什么sleep()函数在mac上的辅助线程上工作? 谢谢。

3 个答案:

答案 0 :(得分:4)

如果可能,全局队列在多个线程上同时运行任务。 Mac通常有4-16个核心,因此队列中有多个工作人员是有意义的。最好将全局队列视为线程池。

如果您希望队列中的任务按特定顺序执行,您可能希望查看串行队列。

答案 1 :(得分:2)

你在使用ipc的任何信号吗?

任何信号都会中断sleep(),但不会中断[NSThread sleepForTimeInterval:]。

答案 2 :(得分:0)

你怎么知道sleep(5)没有在iOS上执行?我在块中的sleep()之前或之后都没有看到任何内容,表明 a 线程没有阻塞,并且当你对并发队列发出dispatch_async()时,你执行的是哪个线程(包括当前线程)一个)在设计上是不确定的,所以不要对此做出任何假设。