2015-08-21 104 views

回答

0

最好在linux內核源代碼中閱讀Documentation/timers/timers-howto.txt

簡單地說,你可以使用msleep(unsigned long msecs)其標題是linux/delay.h

+0

我試過msleep()它正在工作,但我想把微秒的延遲。 usleep()不起作用 – spark63

+0

改爲使用'usleep_range(unsigned long min,unsigned long max)'。 – Arthur

0

睡眠少的人被忙碌的循環完成。他們是不鼓勵的。 使用udelay()但不超過1000微秒。

#include <linux/delay.h> 
void udelay(unsigned long usecs); 
+0

'udelay()'給出錯誤。 「未定義的符號:__const_udelay」。我能理解的是'msleep'只使用'udelay'。 'udelay'調用最終的'__udelay'。但是如果我想把'udelay'放在linux內核的'net'目錄下,應該包含哪些正確的頭文件? – RatDon

+0

@RatDon [msleep](http://lxr.free-electrons.com/source/kernel/time/timer.c#L1675)真的會停止 內核線程,而usleep會執行一個繁忙的循環。他們沒有連接。 對不起,我不知道你爲什麼有一個undefined。這取決於你的架構。對於x86 ,它從[arch/x86/lib/delay.c](http://lxr.free-electrons.com/source/arch/x86/lib/delay.c#L127)導出。正如Arthur在另一個答案中所說的,你可以使用[usleep_range](http://lxr.free-electrons.com/source/kernel/time/timer.c#L1715),它使用高分辨率定時器。 – meuh