任务链表1

————————————————————————————————————————————————————————————————————————————————————————

说来话长 , 但是总归与一点:
纸上得来终觉浅,绝知此事要躬行。

这个是任务链表,就是将要做的事情做成链表的样子。
一串一串的任务直接上!!!

首先是 .c文件

/*

*/

#include "taskChainSetup.h"
#include <stdio.h>

/*
 * @brief 不等长不释放链表的创建
 * @param  none

*/

taskChainHead * createTaskHead(void)
{
	taskChainHead *taskHead;  //
	taskHead = (taskChainHead *)malloc(sizeof(taskChainHead));
	if (taskHead == NULL)
		{
			return NULL;
		}
	taskHead->count = 0;
	taskHead->currentPointer = NULL;
	taskHead->headPointer = NULL;
}


/*对任务连做插入操作*/
bool insertTaskBody(taskChainHead *taskHead , bool(*actionFunc)(void) )
{
	taskChainBody *Bodytemp; //临时用于中间转化的变量
	taskChainBody *BodyNew;  //用于接收新创建的节点

	Bodytemp = taskHead->headPointer;

	if (Bodytemp == NULL)  //证明这个队列目前是空的
		{
			BodyNew = (taskChainBody *)malloc(sizeof(taskChainBody));
			if (BodyNew == NULL)
				{
					return false;
				}
			BodyNew->atomicAction = actionFunc;
			BodyNew->Next = NULL;

			taskHead->count++;
			taskHead->currentPointer = BodyNew;
			taskHead->headPointer = BodyNew;
		}
	else //这个队列目前不空
		{
			while (1)
				{
					if (Bodytemp->Next == NULL)
						{	
							BodyNew = (taskChainBody*)malloc(sizeof(taskChainBody));
							if (BodyNew == NULL) return false;
							BodyNew->atomicAction = actionFunc;
							BodyNew->Next = NULL;
							Bodytemp->Next = BodyNew;
							taskHead->count++;
							break;				
						}
					else
						{
							Bodytemp = Bodytemp->Next;
						}
		
		
				}
			return true;
		}
}


/*处理任务链*/
bool executionTaskChain(taskChainHead* taskHead)
{
	if (taskHead->currentPointer == NULL)
		{
			return false;
		}
	if (taskHead->currentPointer->atomicAction())
		{
			if (taskHead->currentPointer->Next == NULL)
				{
					taskHead->currentPointer = taskHead->headPointer;
					return true;
				}
			else
				{
					taskHead->currentPointer = taskHead->currentPointer->Next;
				}
		}
	return false;
}






void func_test1()
{
	for (int i = 0; i < 100; i++)
		{
			printf("chenxu ");
		}
	printf("\r\n");
}

void func_test2()
{
	for (int i = 0; i < 100; i++)
	{
		printf("asdfghjkl ");
	}
	printf("\r\n");
}


void func_test3()
{
	for (int i = 0; i < 100; i++)
	{
		printf("qwertyuiop ");
	}
	printf("\r\n");
}




int main()
{
	taskChainHead* chenxu_test;
	chenxu_test = createTaskHead();
	insertTaskBody(chenxu_test, func_test1);
	insertTaskBody(chenxu_test, func_test2);
	insertTaskBody(chenxu_test, func_test3);

	while (1)
		{
			if (executionTaskChain(chenxu_test) == true)
				{
					break;
				}
			printf("123456789\r\n");
		}

	while (1)
		{
			;
		}
}




下面是 .h文件

/*


*/

#ifndef	TASKCHAINSETUP
#define	TASKCHAINSETUP

#include "stdlib.h"
#include "stdbool.h"

/* 任务体结构 */
typedef struct taskChainBodyobj
{
	bool(*atomicAction)(void);    //任务链中的一个节点的原子操作函数
	struct taskChainBodyobj *Next; //任务链中节点的下一个节点。
}taskChainBody;



/* 链表的任务头结构 */
typedef struct taskChainHeadObj
{
	int count;                        //任务链条的当前长度
	taskChainBody * currentPointer;   //保存任务链的当前指针
	taskChainBody * headPointer;      //保存任务链头指针 ,(指向下一个任务链的指针)
}taskChainHead;





#endif


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值