1

タイトルのように、sleep() を呼び出すにはどうすればよいですか?

4

2 に答える 2

2

get_random_bytes() を使用できます。sleep() への同様の呼び出しも存在します。たとえば、msleep()、usleep() など、目的に応じて使用できます。*sleep() はアトミック コンテキストでは使用できないことに注意してください。*delay() を使用することをお勧めします。通常、カーネルで sleep()/delay() 呼び出しを使用する前によく考える必要があります。

デバイスドライバを書いていて、デバイスが何かを完了したことを確認したい場合 (そのために割り込みを使用できず、何らかのレジスタをポーリングする必要があると仮定すると)、msleep(10) を実行する代わりに、 msleep(2) などを使用して 5 回ループする場合は、レジスタをポーリングして、できるだけ早くブレークアウトします。待機時間は、少なくともリクエストした時間であり、システムの負荷によって異なります。

于 2012-09-19T16:32:48.287 に答える
0

dmp そうです。上記のすべての点を念頭に置いて、さらにこの単純なマクロを試して、sleep(3) カーネル呼び出しをエミュレートすることもできます。

#ifdef __KERNEL__
/*------------ DELAY_SEC -------------------------*
 * Delays execution for n seconds.
 * MUST be called from process context.
 *------------------------------------------------*/
#define DELAY_SEC(val) \
{ \
    if (!in_interrupt()) {  \
        set_current_state (TASK_INTERRUPTIBLE); \
        schedule_timeout (val * HZ); \
    }   \
}
#endif
于 2012-09-21T03:54:29.423 に答える