在Linux上使用多線程定時器,可以使用以下步驟:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <signal.h>
#include <unistd.h>
#include <sys/time.h>
void timer_handler(int signum)
{
// 在此處編寫定時器處理邏輯
printf("Timer expired!\n");
}
int main()
{
struct sigaction sa;
struct itimerval timer;
// 安裝定時器處理函數
sa.sa_handler = timer_handler;
sa.sa_flags = 0;
sigemptyset(&sa.sa_mask);
sigaction(SIGALRM, &sa, NULL);
// 設置定時器
timer.it_value.tv_sec = 1; // 第一次觸發的秒數
timer.it_value.tv_usec = 0; // 第一次觸發的微秒數
timer.it_interval.tv_sec = 1; // 之后每次觸發的間隔秒數
timer.it_interval.tv_usec = 0; // 之后每次觸發的間隔微秒數
setitimer(ITIMER_REAL, &timer, NULL);
// 創建線程
// 在此處編寫線程邏輯
while(1) {} // 線程邏輯執行完后保持主線程運行
return 0;
}
在上述代碼中,使用sigaction()
函數安裝了一個信號處理函數timer_handler
,在定時器超時時會調用該函數。然后使用setitimer()
函數設置了定時器的時間間隔和觸發時間。
在主線程中,可以創建其他線程執行具體的任務邏輯。