2010-09-30 20 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 

我希望幫助