一个简单的C语言模拟实现多任务运行

程序源代码下载地址:https://download.csdn.net/download/farsight_2098/10753874

 

贴上源代码,给积分不够的用户

/**********************************************
    此多任务函数,仅仅是简单的模拟一下多任务
    并行的感觉,更多丰富功能,读者可以自行扩
    展出自己想要的功能。本程序仅仅使用一个变
    量个sleep函数来作为时间系统时间的增长,若
    要在实际开发中使用需要修改成获取系统时间
    的函数,并且修改单位时间值 
    例如:在创建任务函数的时候可以传递参数
     
***********************************************/
#include
#include

//宏定义 计算任务总数 
#ifndef Number_of_tasks
#define Number_of_tasks(a) (sizeof(a) / sizeof((a)[0]))
#endif

#define Max_number_tasks  100 //最大任务数量 

unsigned long timer_num = 0; //使用timer_num模拟系统时间的增长 

 
// 任务结构
typedef struct{
    void (*Task_Pointer )(void);//函数指针 
    int uNextTime;//下次运行的时间 
    int uLenTime;//运行的时间间隔 
}myTask;

typedef struct{
    myTask Task_List[Max_number_tasks]; 
    int num;//当前的任务数量 
    
}my_Task;
//定义一个任务存储的静态变量 
static my_Task My_Task;


/**********************************************
    创建的线程任务函数,因为不是真的多线程,
    只是模拟这种多任务操作,所以线程任务函
    数中尽量不要有耗时操作的函数, 
***********************************************/ 
void thread_work1(void)
{
    printf("任务11111111111111111111111111111:\n");

}
void thread_work2(void)
{
    printf("任务22222222222222222222222222222:\n");

}
void thread_work3(void)
{
    printf("任务33333333333333333333333333333:\n");

}
void thread_work4(void)
{
    printf("任务44444444444444444444444444444:\n");

}

/**********************************************
    任务创建函数,
    参数1:函数指针
    参数2:下次运行的时间
    参数3:运行间隔时间 
***********************************************/
int Creat_task_func(void (*Task_Pointer )(void),int uNextTime,int uLenTime){
    
    if(My_Task.num > Max_number_tasks){
        printf("已超出最大任务数量\n");
        return -1;
    }
    My_Task.Task_List[My_Task.num].Task_Pointer = *Task_Pointer; 
    My_Task.Task_List[My_Task.num].uNextTime = uNextTime;
    My_Task.Task_List[My_Task.num].uLenTime = uLenTime;
    My_Task.num++;
    
    return 0;
        

/**********************************************
    线程任务运行函数,该函数为一个while死循环
    函数,不断轮训执行任务函数 
***********************************************/
void Task_Process()
{
    int i = 0;
     
    while(1)
    {

        for (i = 0; i < My_Task.num; i++)
        {
            
            if (My_Task.Task_List[i].uNextTime <= timer_num)
            {
                My_Task.Task_List[i].uNextTime += My_Task.Task_List[i].uLenTime;
                My_Task.Task_List[i].Task_Pointer();    
            }
        }
        //-------------------------------------------------------        
        //-----这里模拟时间的增长,假定单位时间是1秒1秒的增长 
        timer_num++;
        sleep(1);
        //-------------------------------------------------------    

    }
}  


int main(void)
{
    //创建任务
     
    Creat_task_func(thread_work1,1,1);// thread_work1每间隔1单位时间执行一次 
    Creat_task_func(thread_work2,2,2);// thread_work2每间隔2单位时间执行一次 
    Creat_task_func(thread_work3,3,3);// thread_work3每间隔3单位时间执行一次 
    Creat_task_func(thread_work4,4,4);// thread_work4每间隔4单位时间执行一次 
        
    //调用任务执行函数 
    Task_Process();


}

你可能感兴趣的:(标准C语言多任务)