亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? objqueue.cpp

?? 自己動(dòng)手寫(xiě)操作系統(tǒng)源代碼,不可多得的代碼
?? CPP
字號(hào):
//***********************************************************************/
//    Author                    : Garry
//    Original Date             : Oct,18 2004
//    Module Name               : objqueue.cpp
//    Module Funciton           : 
//                                This module countains Object Queue's implementation code.
//    Last modified Author      :
//    Last modified Date        :
//    Last modified Content     :
//                                1.
//                                2.
//    Lines number              :
//***********************************************************************/

#ifndef __STDAFX_H__
#include "StdAfx.h"
#endif

//
//Insert an element into Priority Queue.
//This routine insert an common object into priority queue,it's position in the queue is
//determined by the object's priority(dwPriority parameter).
//

static BOOL InsertIntoQueue(__COMMON_OBJECT* lpThis,__COMMON_OBJECT* lpObject,DWORD dwPriority)
{
	__PRIORITY_QUEUE_ELEMENT*    lpQueueElement  =  NULL;
	__PRIORITY_QUEUE_ELEMENT*    lpPrevElement   =  NULL;
	__PRIORITY_QUEUE_ELEMENT*    lpNextElement   =  NULL;
	__PRIORITY_QUEUE*            lpPriorityQueue =  NULL;
	BOOL                         bResult         =  FALSE;
	DWORD                        dwFlags         = 0L;
	//BYTE                         strThread[12];
	//DWORD                        dwThread;

	if((NULL == lpThis) || (NULL == lpObject))
		return bResult;

	lpQueueElement = (__PRIORITY_QUEUE_ELEMENT*)
		KMemAlloc(sizeof(__PRIORITY_QUEUE_ELEMENT),KMEM_SIZE_TYPE_ANY);
	if(NULL == lpQueueElement)  //Failed to allocate memory.
	{
		//dwThread = (DWORD)KernelThreadManager.lpCurrentKernelThread;
		//Hex2Str(dwThread,strThread);
		PrintLine("InsertIntoQueue: Can not allocate memory.");
		//PrintLine("The current kernel thread is :");
		//PrintLine(strThread);
//__DEADLOOP:
		//goto __DEADLOOP;

		goto __TERMINAL;
	}

	lpQueueElement->lpObject      = lpObject;    //Initialize the queue element.
	lpQueueElement->dwPriority    = dwPriority;
	lpQueueElement->lpNextElement = NULL;
	lpQueueElement->lpPrevElement = NULL;

	lpPriorityQueue = (__PRIORITY_QUEUE*)lpThis;

	//ENTER_CRITICAL_SECTION();
	__ENTER_CRITICAL_SECTION(NULL,dwFlags);
	if(NULL == lpPriorityQueue->lpElementHeader)    //If the priority queue is empty.
	{
		//DisableInterrupt();
		lpPriorityQueue->lpElementHeader = lpQueueElement;
		lpPriorityQueue->dwCurrElementNum ++;
		//EnableInterrupt();
		//LEAVE_CRITICAL_SECTION();
		__LEAVE_CRITICAL_SECTION(NULL,dwFlags);
		bResult = TRUE;
		goto __TERMINAL;
	}

	lpPrevElement = lpPriorityQueue->lpElementHeader;
	lpNextElement = lpPrevElement;
	while(lpPrevElement->dwPriority >= dwPriority)    //To find the correct position.
	{
		lpNextElement = lpPrevElement;
		lpPrevElement = lpPrevElement->lpNextElement;
		if(NULL == lpPrevElement)
			break;
	}
	if(NULL == lpPrevElement)  //This newly object should be the last object.
	{
		//DisableInterrupt();
		lpNextElement->lpNextElement  = lpQueueElement;
		lpQueueElement->lpPrevElement = lpNextElement;
		lpPriorityQueue->dwCurrElementNum ++;
		//EnableInterrupt();
		//LEAVE_CRITICAL_SECTION();
		__LEAVE_CRITICAL_SECTION(NULL,dwFlags);
		bResult = TRUE;
		goto __TERMINAL;
	}
	if(lpPrevElement == lpNextElement)  //This newly object should be the first object in the
		                                //current queue.
	{
		//DisableInterrupt();
		lpQueueElement->lpNextElement    = lpPrevElement;
		lpPrevElement->lpPrevElement     = lpQueueElement;
		lpPriorityQueue->lpElementHeader = lpQueueElement;
		lpPriorityQueue->dwCurrElementNum ++;
		//EnableInterrupt();
		//LEAVE_CRITICAL_SECTION();
		__LEAVE_CRITICAL_SECTION(NULL,dwFlags);
		bResult = TRUE;
		goto __TERMINAL;
	}
	else    //The object is not the first object,is not the last object too.
	{
		//DisableInterrupt();
		lpQueueElement->lpNextElement = lpPrevElement;
		lpQueueElement->lpPrevElement = lpNextElement;
		lpPrevElement->lpPrevElement  = lpQueueElement;
		lpNextElement->lpNextElement  = lpQueueElement;
		lpPriorityQueue->dwCurrElementNum ++;
		//EnableInterrupt();
		//LEAVE_CRITICAL_SECTION();
		__LEAVE_CRITICAL_SECTION(NULL,dwFlags);
		bResult = TRUE;
		goto __TERMINAL;
	}

__TERMINAL:
	return bResult;
}

//
//Delete an element from Priority Queue.
//This routine searchs the queue,to find the object to be deleted,
//if find,delete the object from priority queue,returns TRUE,else,
//returns FALSE.
//If the object is inserted into this queue for many times,this
//operation only deletes one time.
//

static BOOL DeleteFromQueue(__COMMON_OBJECT* lpThis,__COMMON_OBJECT* lpObject)
{
	__PRIORITY_QUEUE_ELEMENT*  lpFirstElement    = NULL;
	__PRIORITY_QUEUE_ELEMENT*  lpSecondElement   = NULL;
	__PRIORITY_QUEUE_ELEMENT*  lpCurrElement     = NULL;
	__PRIORITY_QUEUE*          lpPriorityQueue   = NULL;
	BOOL                       bResult           = FALSE;
	DWORD                      dwFlags           = 0L;

	if((NULL == lpThis) || (NULL == lpObject)) //Parameters check.
		goto __TERMINAL;

	lpPriorityQueue = (__PRIORITY_QUEUE*)lpThis;
	//lpCurrElement = lpPriorityQueue->lpElementHeader;
	//ENTER_CRITICAL_SECTION();
	__ENTER_CRITICAL_SECTION(NULL,dwFlags);
	lpFirstElement = lpPriorityQueue->lpElementHeader;

	if(NULL == lpFirstElement)  //If the queue does not countain any object,terminal.
	{
		//LEAVE_CRITICAL_SECTION();
		__LEAVE_CRITICAL_SECTION(NULL,dwFlags);
		goto __TERMINAL;
	}

	while(lpFirstElement->lpObject != lpObject)
	{
		lpFirstElement = lpFirstElement->lpNextElement;
		if(NULL == lpFirstElement)
			break;
	}

	if(NULL == lpFirstElement)  //The queue does not countain the object.
	{
		//LEAVE_CRITICAL_SECTION();
		__LEAVE_CRITICAL_SECTION(NULL,dwFlags);
		goto __TERMINAL;
	}

	if(NULL == lpFirstElement->lpPrevElement)  //If the object to be deleted is the first
		                                       //object of the current priority queue.
	{
		//DisableInterrupt();
		if(lpFirstElement->lpNextElement != NULL)    //Not the last element.
		{
			lpPriorityQueue->lpElementHeader = lpFirstElement->lpNextElement;
			lpFirstElement->lpNextElement->lpPrevElement = NULL;
		}
		else    //This is the last element.
			lpPriorityQueue->lpElementHeader = NULL;

		lpPriorityQueue->dwCurrElementNum --;
		//EnableInterrupt();
		//LEAVE_CRITICAL_SECTION();
		__LEAVE_CRITICAL_SECTION(NULL,dwFlags);
		KMemFree((LPVOID)lpFirstElement,KMEM_SIZE_TYPE_ANY,0L);  //Free the memory.
		bResult = TRUE;
		goto __TERMINAL;
	}
	if(NULL == lpFirstElement->lpNextElement)  //The object to be deleted is the last object.
	{
		//DisableInterrupt();
		lpFirstElement->lpPrevElement->lpNextElement = NULL;
		lpPriorityQueue->dwCurrElementNum --;
		//EnableInterrupt();
		//LEAVE_CRITICAL_SECTION();
		__LEAVE_CRITICAL_SECTION(NULL,dwFlags);
		KMemFree((LPVOID)lpFirstElement,KMEM_SIZE_TYPE_ANY,0L);
		bResult = TRUE;
		goto __TERMINAL;
	}
	else    //The object to be deleted is not the first,is not the last too.
	{
		//DisableInterrupt();
		lpFirstElement->lpNextElement->lpPrevElement = lpFirstElement->lpPrevElement;
		lpFirstElement->lpPrevElement->lpNextElement = lpFirstElement->lpNextElement;
		lpPriorityQueue->dwCurrElementNum --;
		//EnableInterrupt();
		//LEAVE_CRITICAL_SECTION();
		__LEAVE_CRITICAL_SECTION(NULL,dwFlags);
		KMemFree((LPVOID)lpFirstElement,KMEM_SIZE_TYPE_ANY,0L);
		bResult = TRUE;
	}

__TERMINAL:
	return bResult;
}

//
//Get the header element from Priority Queue.
//This routine get the first(header) object of the priority queue,
//and release the memory this element occupies.
//

static __COMMON_OBJECT* GetHeaderElement(__COMMON_OBJECT* lpThis,DWORD* lpPriority)
{
	__COMMON_OBJECT*          lpCommonObject    = NULL;
	__PRIORITY_QUEUE*         lpPriorityQueue   = NULL;
	__PRIORITY_QUEUE_ELEMENT* lpQueueElement    = NULL;
	DWORD                     dwFlags           = 0L;

	if(NULL == lpThis)
		return NULL;

	lpPriorityQueue = (__PRIORITY_QUEUE*)lpThis;

	//ENTER_CRITICAL_SECTION();
	__ENTER_CRITICAL_SECTION(NULL,dwFlags);
	lpQueueElement = lpPriorityQueue->lpElementHeader;
	if(NULL == lpQueueElement)    //The queue is empty.
	{
		if(lpPriority != NULL)
			*lpPriority = 0L;
		//LEAVE_CRITICAL_SECTION();
		__LEAVE_CRITICAL_SECTION(NULL,dwFlags);
		return NULL;
	}

	lpPriorityQueue->lpElementHeader = lpQueueElement->lpNextElement;  //Update the queue's
	                                                                   //element header.
	lpPriorityQueue->lpElementHeader->lpPrevElement = NULL;            //Set to NULL indicates the
	                                                                   //first element.

	lpCommonObject = lpQueueElement->lpObject;
	if(lpPriority != NULL)
	{
		*lpPriority = lpQueueElement->dwPriority;    //Return the priority value.
	}
	//LEAVE_CRITICAL_SECTION();
	__LEAVE_CRITICAL_SECTION(NULL,dwFlags);
	KMemFree((LPVOID)lpQueueElement,KMEM_SIZE_TYPE_ANY,0L);  //Release the queue element.

	return lpCommonObject;
}

//Initialize routine of the Priority Queue.
BOOL PriQueueInitialize(__COMMON_OBJECT* lpThis)
{
	__PRIORITY_QUEUE*                lpPriorityQueue     = NULL;
	BOOL                             bResult             = FALSE;

	if(NULL == lpThis)           //Parameter check.
		return bResult;

	//Initialize the Priority Queue.
	lpPriorityQueue = (__PRIORITY_QUEUE*)lpThis;
	lpPriorityQueue->lpElementHeader  = NULL;
	lpPriorityQueue->dwCurrElementNum = 0L;
	lpPriorityQueue->InsertIntoQueue  = InsertIntoQueue;
	lpPriorityQueue->DeleteFromQueue  = DeleteFromQueue;
	lpPriorityQueue->GetHeaderElement = GetHeaderElement;
	bResult = TRUE;

	return bResult;
}

//
//Uninitialize routine of Priority Queue.
//This routine frees all memory this priority queue occupies.
//

VOID PriQueueUninitialize(__COMMON_OBJECT* lpThis)
{
	__PRIORITY_QUEUE_ELEMENT*    lpFirstElement    = NULL;
	__PRIORITY_QUEUE_ELEMENT*    lpSecondElement   = NULL;
	__PRIORITY_QUEUE*            lpPriorityQueue   = NULL;

	if(NULL == lpThis)
		return;

	lpPriorityQueue = (__PRIORITY_QUEUE*)lpThis;
	lpFirstElement  = lpPriorityQueue->lpElementHeader;
	if(NULL == lpFirstElement)
		return;

	while(lpFirstElement)  //Release the memory this priority queue occupies.
	{
		lpSecondElement = lpFirstElement;
		lpFirstElement  = lpFirstElement->lpNextElement;
		KMemFree((LPVOID)lpSecondElement,KMEM_SIZE_TYPE_ANY,0L);  //Free the memory.
	}
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品对白一区国产伦| 久久精品一区二区三区不卡牛牛| 国产一区二区三区不卡在线观看 | 久久久激情视频| 欧洲亚洲精品在线| 丁香婷婷综合网| 青青草原综合久久大伊人精品优势| 一区在线观看视频| 久久亚洲综合色| 正在播放亚洲一区| 欧美国产日产图区| 日韩一区二区三区视频在线 | 国产精品视频观看| 精品久久久久久久久久久久久久久| 欧美色涩在线第一页| 99视频精品全部免费在线| 九色|91porny| 蜜臀久久99精品久久久久宅男 | 国产在线精品免费| 午夜视频在线观看一区二区三区| 亚洲欧洲中文日韩久久av乱码| 久久久www成人免费毛片麻豆| 7777精品伊人久久久大香线蕉| 91片在线免费观看| 99久久精品免费| 丁香六月综合激情| 国产不卡视频一区| 国产精品538一区二区在线| 欧美bbbbb| 免费一区二区视频| 日本不卡不码高清免费观看| 天堂精品中文字幕在线| 亚洲一区二区精品视频| 一区二区三区中文字幕| 亚洲男人的天堂一区二区| 亚洲欧美一区二区三区极速播放 | 日韩精品乱码av一区二区| 亚洲午夜电影在线观看| 亚洲电影一区二区| 亚洲小少妇裸体bbw| 亚洲一区二区三区在线看| 一区二区高清在线| 亚洲电影视频在线| 爽好久久久欧美精品| 日韩av网站免费在线| 日本vs亚洲vs韩国一区三区 | 一区二区三区欧美日| 一区二区三区四区蜜桃| 一级女性全黄久久生活片免费| 亚洲制服丝袜av| 日本伊人色综合网| 精品亚洲aⅴ乱码一区二区三区| 久久电影国产免费久久电影| 精品一区二区三区在线观看国产| 国产一区二区三区精品欧美日韩一区二区三区 | 一区二区三区免费在线观看| 一区二区成人在线| 琪琪一区二区三区| 激情丁香综合五月| bt欧美亚洲午夜电影天堂| 色综合久久久久综合体桃花网| 在线观看免费成人| 日韩一区二区在线看片| 国产日韩欧美一区二区三区乱码 | 精品一区二区三区欧美| 国产河南妇女毛片精品久久久| 97久久超碰国产精品电影| 日本韩国欧美在线| 91精品国产综合久久小美女| 久久理论电影网| 亚洲欧洲精品一区二区三区不卡| 亚洲午夜免费电影| 久久99久久久欧美国产| 成人福利在线看| 欧美日韩一区二区在线观看视频| 亚洲精品在线免费播放| 亚洲欧美二区三区| 精品午夜久久福利影院| a在线播放不卡| 欧美一区二区在线播放| 中文字幕一区二区三区精华液 | 精品伦理精品一区| 国产精品成人一区二区三区夜夜夜| 亚洲综合丁香婷婷六月香| 久久国产精品色| 欧美最猛黑人xxxxx猛交| www精品美女久久久tv| 亚洲人成精品久久久久| 国模娜娜一区二区三区| 在线观看免费视频综合| 国产日韩视频一区二区三区| 亚洲gay无套男同| 丁香天五香天堂综合| 欧美精三区欧美精三区| 欧美韩国日本一区| 久久精品国产精品亚洲红杏| 色婷婷国产精品| 国产亚洲精品aa午夜观看| 日产国产欧美视频一区精品| 91免费视频大全| 亚洲国产精品ⅴa在线观看| 轻轻草成人在线| 欧美日韩国产影片| 成人欧美一区二区三区白人| 麻豆专区一区二区三区四区五区| 91麻豆国产精品久久| 欧美国产丝袜视频| 极品少妇xxxx偷拍精品少妇| 欧美日韩国产色站一区二区三区| 国产精品不卡一区| 国产 欧美在线| 亚洲精品一区二区三区在线观看 | 国产日韩高清在线| 美女在线视频一区| 777午夜精品免费视频| 亚洲精品中文在线| 色综合色综合色综合| 中文字幕第一页久久| 国产a级毛片一区| 久久久一区二区三区捆绑**| 美女爽到高潮91| 欧美一区二区精美| 日日噜噜夜夜狠狠视频欧美人| 在线观看av不卡| 一区二区三区资源| 97久久久精品综合88久久| 国产精品看片你懂得| 成人午夜视频在线| 国产精品你懂的在线欣赏| 国产精品影视在线| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲精品视频在线观看免费| 成人国产精品免费观看动漫| 热久久一区二区| 91精品婷婷国产综合久久性色| 亚洲小说欧美激情另类| 欧美日韩在线播| 天天综合色天天综合| 欧美高清精品3d| 蜜芽一区二区三区| 午夜视频久久久久久| 欧美高清dvd| 亚洲最大色网站| 日本午夜一区二区| 欧美精品国产精品| 美女一区二区久久| 26uuu亚洲| 成人久久视频在线观看| 国产精品全国免费观看高清| 99国产精品久| 亚洲午夜激情av| 日韩女优制服丝袜电影| 国产精品综合在线视频| 欧美国产精品中文字幕| 91亚洲精品久久久蜜桃| 亚洲国产另类av| 日韩美女主播在线视频一区二区三区| 久久99精品久久久久久| 中文字幕不卡在线观看| 91黄视频在线观看| 美女视频第一区二区三区免费观看网站| 2024国产精品视频| 91视频免费观看| 日韩国产在线一| 国产日韩欧美麻豆| 欧美性生活影院| 国产在线播精品第三| 亚洲美女免费视频| 日韩欧美国产不卡| a级精品国产片在线观看| 五月婷婷久久综合| 国产日韩欧美一区二区三区综合| 色偷偷一区二区三区| 精品在线观看视频| 依依成人综合视频| 欧美精品一区二区三区一线天视频 | 国产欧美一区二区精品仙草咪| 99re在线精品| 久久99久久久久| 亚洲情趣在线观看| 欧美xxx久久| 在线观看一区不卡| 国产成人综合亚洲网站| 午夜影视日本亚洲欧洲精品| 国产亚洲婷婷免费| 欧美日韩国产高清一区二区| 粉嫩久久99精品久久久久久夜| 亚洲成在线观看| 国产精品免费网站在线观看| 欧美日韩国产另类一区| 成人av电影观看| 男人的j进女人的j一区| 亚洲人成网站在线| 国产视频一区二区在线| 3d成人h动漫网站入口| 99麻豆久久久国产精品免费 | 欧美美女喷水视频| 99久久99久久精品国产片果冻| 精品一区二区三区香蕉蜜桃| 图片区小说区区亚洲影院|