请用C语言编写一个任务调度的接口函数,完成不同任务的注册和轮询执行,每个任务可以设置不同的轮询时间
时间: 2024-05-13 07:20:29 浏览: 159
好的,这是一个比较简单的任务调度器的示例代码,你可以根据实际需求进行修改:
```c
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#define MAX_TASKS 10
typedef struct {
char name[32];
int interval;
time_t last_run_time;
void (*handler)();
} task_t;
task_t tasks[MAX_TASKS];
int task_count = 0;
void register_task(char* name, int interval, void (*handler)()) {
if (task_count >= MAX_TASKS) {
printf("Cannot register more tasks.\n");
return;
}
task_t* task = &tasks[task_count++];
snprintf(task->name, sizeof(task->name), "%s", name);
task->interval = interval;
task->last_run_time = time(NULL);
task->handler = handler;
printf("Task registered: %s\n", task->name);
}
void run_task(task_t* task) {
printf("%s started\n", task->name);
task->handler();
printf("%s finished\n", task->name);
task->last_run_time = time(NULL);
}
void schedule_tasks() {
while (1) {
for (int i=0; i<task_count; i++) {
task_t* task = &tasks[i];
time_t now = time(NULL);
if (now - task->last_run_time >= task->interval) {
run_task(task);
}
}
sleep(1);
}
}
void task1() {
printf("Task 1 running...\n");
}
void task2() {
printf("Task 2 running...\n");
}
int main() {
register_task("Task 1", 3, task1);
register_task("Task 2", 5, task2);
schedule_tasks();
return 0;
}
```
以上就是一个简单的任务调度器的示例代码,每个任务可以设置不同的轮询时间,你可以根据具体需求进行调整和修改。
阅读全文