2010-09-30 84 views
4

请注意Sleep中的大写“S”。具有大写字母“S”的Sleep是一种标准功能,可在PC上休眠毫秒。在Mac OS X上,没有这种符号。但是,Xcode链接环境似乎找到了一些链接它的东西。它是什么?C“睡眠”功能(大写“S”)在Mac上做什么?

+1

谷歌被打破? Objective C SDK帮助被破坏了?你根本没有资源? – 2010-09-30 01:54:02

+2

@S。洛特:AFAIK没有办法使谷歌搜索区分大小写,那么你如何搜索睡眠但不睡觉? – JWWalker 2010-09-30 02:04:10

+0

我想它可能是一个传统的API,但我没有足够的磁盘空间来下载旧的文档集。 – JWWalker 2010-09-30 02:05:27

回答

6

嗯,这是一个古老的碳功能(在CoreServices/OSServices框架中),让电脑进入睡眠状态。我找不到任何文档。

+0

我很确定这是正确的答案,因为那是我看到的奇怪行为。其他不好的事情随之而来,但机器关闭它的监视器和磁盘。 – ddyer 2010-09-30 05:52:41

0

相当于睡眠要

[NSThread sleepForTimeInterval:5.0];

然而,这是秒。要使用毫秒我认为你必须使用usleep(NUM * 1000),其中num是钢厂

的个数,但我不知道是什么睡眠(...)确实

+0

是的,我知道如何在Mac上正常睡眠。我的问题是,我的跨平台braino在做什么? – ddyer 2010-09-30 01:53:34

0

在Mac上,在OSX下,没有这样的符号。

我不认为经典mac中有这样的符号 - 我甚至看过我的古代THINK Reference副本。

我也很惊讶地发现在C中有一个Sleep(具有大写S)函数,因为许多人用全部小写来命名C函数。

您是否因为出现链接错误而提示您提问?

+0

我想他是问这个问题,因为他(意外)不会收到链接错误。 – 2010-09-30 02:13:15

+0

我在一个方便的项目上得到一个链接错误,这个链接错误只是与Carbon框架相关联。它必须在别的东西中定义。 – Seth 2010-09-30 02:19:07

0

有usleep()。

pthread_create(&pth,NULL,threadFunc,"foo"); 

while(i < 100) 
{ 
    usleep(1); 
    printf("main is running...\n"); 
    ++i; 
} 

printf("main waiting for thread to terminate...\n"); 
pthread_join(pth,NULL); 

return 0; 
0

是否使用项目中的任何其他图书馆?

我收到了使用Cocoa和Carbon的编译错误,但是我注意到睡眠函数(使用定义)是SDL和SFML跨平台库中的一项功能,可能对于其他许多功能。

您是否在仅使用苹果库的模板项目上试过了您的代码示例?

它可能是Sleep()是你正在链接的其他东西的函数。

2

sleep(int)是运行mac的unix系统中的一种方法,称为Darwin。

Here is the ManPage for sleep

本质上讲,它是一个C调用,您可以让计算机进入睡眠状态的秒“诠释”号。

或者,您可以使用'usleep(unsigned int)',它将为'unsigned int'数字的“微秒”数量休眠,该数字是秒* 1000 * 1000或1000毫秒。

Here is the ManPage for usleep

这两个函数被包装以允许您访问底层的“C/C++”的方法,正常的C/C++开发者将使用。

在这里,如果你想有更多的粒度您需要usleep(无符号整数),这将给你一个更精确的数字等效代码示例

NSTimeInterval sleepTime = 2.0; //Time interval is a double containing fractions of seconds 
[NSThread sleepForTimeInterval:sleepTime]; // This will sleep for 2 seconds 
sleep((int)sleepTime); // This will also sleep for 2 seconds 

NSTimeInterval sleepTime = 0.2; // This is essentially 2 tenths of a second 
[NSThread sleepForTimeInterval:sleepTime]; // This will sleep for 2 tenths of a second; 
usleep((unsigned int)(sleepTime * 1000 * 1000)); // This will also sleep for 2 tenths of a second 

我希望帮助