2015-07-22 88 views
-4

我正在使用Java來測試我的代碼&我使用了線程。我將相同的代碼轉換爲c。java的sleep()和c的sleep()之間的區別是什麼?

#include<pthread.h> 

我已經在c中使用了上述內容。所以我只是想知道,睡眠()的Java睡眠()的C(因爲在Java中它的工作正常,但在C它沒有任何反應)有任何區別。

+4

所以你的問題實際上是「爲什麼我的C代碼不工作?」? –

+2

POSIX'sleep(x)'使用秒,java版本使用毫秒。 – wimh

+0

簡而言之,您的問題是:_「與現有Java函數具有相同名稱的C函數之間有什麼區別?」_ –

回答

0

你應該使用

#include<unistd.h> 

在Windows中,你可以使用:

#include<windows.h> 
1

Sleep是一個窗口函數。在Unix/Linux上使用usleep。請注意,usleep需要幾微秒,而不是毫秒。

>更新的定義usleep()

年長POSIX標準,所以這是可用於Linux:

int usleep(useconds_t usec); 

說明

的usleep()函式功能掛起調用處理的執行對於 (至少)usec微秒。睡眠可能會稍微延長任何系統活動或花在處理呼叫上的時間或系統定時器粒度的 。

usleep()需要微秒,所以你將有1000以毫秒睡覺乘以輸入。


usleep()已被棄用,隨後從POSIX中刪除;爲新的代碼,nanosleep()優選:

#include <time.h> 

    int nanosleep(const struct timespec *req, struct timespec *rem); 

說明

nanosleep()暫停調用線程的執行,直到至少在*req指定的時間已經過去時,或 遞送的信號的那觸發 調用線程中的處理程序的調用,或者終止該進程。

結構timespec用於指定納秒級精度的時間間隔。它被定義爲如下:

 struct timespec { 
      time_t tv_sec;  /* seconds */ 
      long tv_nsec;  /* nanoseconds */ 
     }; 
2

C函數被定義爲sleep(unsigned int seconds);

Java函數作爲Thread.sleep(long millis).

儘管功能是相似的,參數的含義是不同的。在Java中的Thread.sleep(1000)將停止你的線程一秒鐘,在C中的sleep(1000)將凍結它看起來像永遠。

在C中有更好的精度函數:在Windows上,你從windows.h中得到了Sleep,而在Linux中你分別用微秒和納秒參數睡眠和納睡。

相關問題