Android中延時函數分為使用者空間和核心空間兩部分:
核心空間
#include <linux/delay.h>
udelay(int n);
mdelay(int n));
ndelay(int n));
這幾個函數會讓cpu死迴圈,導致cpu忙等待.
usleep(int n);
msleep(int n));
nsleep(int n));
第一組和第二組延時函數的區別是第一組的延時是一個忙等待,進程間無法調度,驅動中需要實現短時間、精確的等待可以使用第一組函數。第二組函數允許調用的進程進入休眠,此時CPU可以轉而去執行其它進程的任務,使用第二組延時函數實際的延時值會大於設定的延時時間。
使用者空間
#include <unistd.h>
unsigned int sleep(unsigned int seconds);
int usleep(useconds_t usec);
ms級的延時延時可以通過宏定義實現:
#define xxx_msleep(ms) usleep((ms) * 1000)
本文轉自:http://blog.csdn.net/hp0773/article/details/8257183
Android中延時函數分為使用者空間和核心空間兩部分:
核心空間
#include <linux/delay.h>
udelay(int n);
mdelay(int n));
ndelay(int n));
這幾個函數會讓cpu死迴圈,導致cpu忙等待.
usleep(int n);
msleep(int n));
nsleep(int n));
第一組和第二組延時函數的區別是第一組的延時是一個忙等待,進程間無法調度,驅動中需要實現短時間、精確的等待可以使用第一組函數。第二組函數允許調用的進程進入休眠,此時CPU可以轉而去執行其它進程的任務,使用第二組延時函數實際的延時值會大於設定的延時時間。
使用者空間
#include <unistd.h>
unsigned int sleep(unsigned int seconds);
int usleep(useconds_t usec);
ms級的延時延時可以通過宏定義實現:
#define xxx_msleep(ms) usleep((ms) * 1000)