タイトルのように、sleep() を呼び出すにはどうすればよいですか?
質問する
1394 次
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 に答える