Linux學習筆記(05 25)定時器介面

2021-07-02 20:04:52 字數 1230 閱讀 2600

posix時鐘系列:

建立、初始化以及刪除乙個定時器的行動被分為三個不同的函式:timer_create()(建立定時器)、timer_settime()(初始化定時器)以及timer_delete(銷毀它)。

(1)建立乙個定時器:

int timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid)

程序可以通過呼叫timer_create()建立特定的定時器,定時器是每個程序自己的,不是在fork時繼承的。

引數clock_id說明定時器是基於哪個時鐘的。

clock_id取值為以下:

clock_realtime :systemwide realtime clock.

clock_monotonic:represents monotonic time. cannot be set.

clock_process_cputime_id :high resolution per-process timer.

clock_thread_cputime_id :thread-specific timer.

clock_realtime_hr :high resolution version of clock_realtime.

clock_monotonic_hr :high resolution version of clock_monotonic.

引數*timerid裝載的是被建立的定時器的id。該函式建立了定時器,並將他的id 放入timerid指向的位置中。

引數evp指定了定時器到期要產生的非同步通知。

如果evp為null,那麼定時器到期會產生預設的訊號,對 clock_realtimer來說,預設訊號就是sigalrm。

如果要產生除預設訊號之外的其它訊號,程式必須將 evp->sigev_signo設定為期望的信號碼。

struct sigevent 結構中的成員evp->sigev_notify說明了定時器到期時應該採取的行動。通常,這個成員的值為sigev_signal,這個值說明在定時器到期時,會產生乙個訊號。程式可以將成員evp->sigev_notify設為sigev_none來防止定時器到期時產生訊號。

如果幾個定時器產生了同乙個訊號,處理程式可以用 evp->sigev_value來區分是哪個定時器產生了訊號。要實現這種功能,程式必須在為訊號安裝處理程式時,使用struct sigaction的成員sa_flags中的標誌符sa_siginfo。

Linux學習筆記(05 25)條件變數的使用

1.互斥量的存在問題 互斥量是執行緒程式必需的工具,但它們並非萬能的。如果執行緒正在等待共享資料內某個條件出現,它可以重複對互斥物件鎖定和解鎖,每次都會檢查共享資料結構,以查詢某個值。但這種繁忙查詢的效率非常低。可以讓呼叫執行緒短暫地進入睡眠,比如睡眠三秒鐘,但就無法最快作出響應。需要的是 當執行緒...

Linux學習筆記 定時任務設定

定時任務通常用於處理需要定期執行的系統維護任務,比如日誌清理,系統檢查等,通過crontab和at,命令可以實現。u user指定執行此任務的使用者是誰,如果不設定,預設是當前登入使用者,該選項只有root使用者才能使用 l 顯示當前使用者的任務 r 刪除當前使用者的任務 e 更改使用者的任務要使用...

linux學習筆記之許可權管理和定時任務

linux 使用者許可權管理 修改許可權管理 chmod指令修改資料夾或者檔案許可權 定時任務 我們經常使用的是crontab命令是cron table的簡寫,它是cron的配置檔案,也可以叫它作業列表,我們可以在以下資料夾內找到相關配置檔案。我們用crontab e進入當前使用者的工作表編輯 我們...