2012-06-18 663 views
1

我不明白這些用法:msleepmsleep_interruptible ...我知道一個可中斷,其他不可中斷,但找不到某些用法,我實際上可以看到。我試着用函數調用線程給msleep並打印出「你好!」然後msleep(msleep_interruptible),但看不到任何區別。任何人都可以幫助我,可以用例子嗎?msleep(毫秒)與msleep_interruptible(毫秒)

+0

這是否幫助? http://help.lockergnome.com/linux/msleep_interruptible-msleep--ftopict369242.html – krlmlr

+0

現在我並不關心加載平均值(他們正在討論這個線程),但我無法理解這些API背後的想法,何時使用? (我想爲什麼,你指的是,我認爲有幫助,稍後當我想使用!) –

回答

4

不同之處在於發生信號(例如SIGINT)時發生的情況,併爲該信號設置了信號處理程序。

  • msleep回到休眠
  • msleep_interruptible返回給調用者(與代表剩餘的睡眠時間爲非零值)。

可中斷睡眠的一個例子:

$ perl -Mthreads -E' 
    my $stime=time; 
    async { sleep(3); kill INT => $$; }->detach(); 
    $SIG{INT} = sub { warn "Got INT signal after ".(time-$stime)."\n"; }; 
    sleep(5); 
    say time-$stime; 
' 
Got INT signal after 3 
3 

它睡3秒而不是5,因爲它被認爲是由一個處理信號中斷。另一個版本將打印以下:

Got INT signal after 3 
5 

換句話說,信號處理程序被調用無論哪種方式,但即使信號只有一個版本不返回

+0

你可以給你的例子,其中包括你剛剛說的嗎? BTW信號就像是什麼? (SIGINT)種? –

+0

是的,就像SIGINT一樣。 – ikegami

+0

添加了一個示例。 – ikegami