开发者

What does C "Sleep" function (capital "S") do on a Mac?

开发者 https://www.devze.com 2023-01-17 23:38 出处:网络
Note the capital \"S\" in Sleep.Sleep with a capital \"S\" is a standard function that sleeps milliseconds on the PC.On Mac OS X, there is no such symbol.However, the Xcode linking environment seems t

Note the capital "S" in Sleep. Sleep with a capital "S" is a standard function that sleeps milliseconds on the PC. On Mac OS X, there is no such symbol. However, the Xcode linking environment seems to find something to link it to. What is 开发者_运维技巧it?


Well, it’s an old old Carbon function (in the CoreServices / OSServices framework) that puts the computer to sleep. I can’t find any documentation.

  • Sleep and Xcode


sleep(int) is a method from the unix system that run mac Known as Darwin.

Here is the ManPage for sleep

Essentially it is a C call that lets you tell the computer to sleep for 'int' number of seconds.

alternatively you can use 'usleep(unsigned int)' which will sleep for 'unsigned int' number of "microseconds" which is second * 1000 * 1000 or 1000 milliseconds.

Here is the ManPage for usleep

Both of these functions are wrapped to allow you access to the underlying "C/C++" methods that a normal C/C++ developer would use.

here is an equivalent code example

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

if you wish to have more granularity you will need usleep(unsigned int) which will give you a much more precise number.

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

I hope that helps


The equivalent to sleep should be

[NSThread sleepForTimeInterval:5.0];

However this is in seconds. To use milliseconds I think you have to use usleep( num * 1000), where num is number of mills

But I don't know what Sleep(...) does


On the mac, under OSX, there is no such symbol.

I don't think there is such a symbol in Classic mac either - I even looked in my ancient copy of THINK Reference.

I would also be surprised to find a Sleep (with a capital S) function in C, since many people name C functions using all lower case.

Were you prompted to ask the question because you're getting a link error?


There is 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;


Are you using any other libraries in your project?

I'm getting compile errors using both Cocoa and Carbon using apple's template projects, however I notice that sleep functions (using the definition) are a feature in both the SDL and SFML cross platform libraries, and perhaps for many others.

Have you tried your code example on a template project using only with apples libraries?

It could be that Sleep() is a function in something else you are linking to.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号