Open GoogleCodeExporter opened 9 years ago
#include "stdafx.h"
#include "TaskQueue.h"
//iCount > 1
TaskManager::TaskManager(int iCount) : head(NULL), nail(NULL), producePos(NULL)
{
//new the queue
//
head = new TaskQueue;
memset(head, 0, sizeof(TaskQueue));
TaskQueue *temp = NULL, *last = head;
for (int i = 1; i < iCount; i++)
{
temp = new TaskQueue;
memset(temp, 0, sizeof(TaskQueue));
last->next = temp;
last = temp;
}
nail = last;
producePos = head;
}
TaskManager::~TaskManager()
{
//delete the queue.MUST wait to consume up
TaskQueue *temp = head->next;
while (head)
{
delete head;
head = temp;
if (temp) temp = temp->next;
}
}
void *TaskManager::Pop()
{
if (!head || !head->pData)
{
return NULL;
}
//new head
//
void *temp = head->pData;
TaskQueue *p = head;
head = head->next;
//add head to nail then
//
memset (p, 0, sizeof(TaskQueue));
nail->next = p;
nail = p;
// printf("popped:%d\n", temp);
return temp;
}
void TaskManager::Push(void *pData)
{
// printf("pushed:%d\n", pData);
producePos->pData = pData;
if (!producePos->next)
{
producePos->next = new TaskQueue;
memset(producePos->next, 0, sizeof(TaskQueue));
nail = producePos->next;
}
producePos = producePos->next;
}
////////////////////////////////
#pragma once
//FIFO:consume the head & push the head to nail for reuse, produce in the nail
typedef struct _TaskQueue
{
void *pData;
_TaskQueue *next;
} TaskQueue;
class TaskManager
{
public:
TaskManager(int iCount = 2 ^ 6);
~TaskManager();
void Push(void *pData);
void *Pop();
private:
TaskQueue *head;
TaskQueue *nail;
TaskQueue *producePos;
};
Original comment by Giggs...@gmail.com
on 24 Feb 2012 at 12:59
Original issue reported on code.google.com by
Giggs...@gmail.com
on 23 Feb 2012 at 6:59