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

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

?? synobj.cpp

?? 自己動(dòng)手寫操作系統(tǒng)源代碼,不可多得的代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號(hào):
//***********************************************************************/
//    Author                    : Garry
//    Original Date             : Sep 21, 2005
//    Module Name               : SYNOBJ.CPP
//    Module Funciton           : 
//                                This module countains synchronization object's implementation
//                                code.
//                                The following synchronization object(s) is(are) defined
//                                in this file:
//                                  1. EVENT
//                                  2. MUTEX
//                                  3. SEMAPHORE
//                                  4. TIMER
//
//                                ************
//                                This file is the most important file of Hello China.
//                                ************
//    Last modified Author      :
//    Last modified Date        :
//    Last modified Content     :
//                                1.
//                                2.
//    Lines number              :
//***********************************************************************/

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

//
//Routines pre-declaration.
//
static DWORD WaitForEventObject(__COMMON_OBJECT*);
static DWORD SetEvent(__COMMON_OBJECT*);
static DWORD ResetEvent(__COMMON_OBJECT*);
static DWORD WaitForEventObjectEx(__COMMON_OBJECT*,DWORD);

//---------------------------------------------------------------------------------
//
//                SYNCHRONIZATION OBJECTS
//
//----------------------------------------------------------------------------------

//
//Event object's initializing routine.
//This routine initializes the members of an event object.
//

BOOL EventInitialize(__COMMON_OBJECT* lpThis)
{
	BOOL                  bResult          = FALSE;
	__EVENT*              lpEvent          = NULL;
	__PRIORITY_QUEUE*     lpPriorityQueue  = NULL;

	if(NULL == lpThis)
		goto __TERMINAL;

	lpEvent = (__EVENT*)lpThis;

	lpPriorityQueue = (__PRIORITY_QUEUE*)
		ObjectManager.CreateObject(&ObjectManager,NULL,
		OBJECT_TYPE_PRIORITY_QUEUE);
	if(NULL == lpPriorityQueue)
		goto __TERMINAL;

	bResult = lpPriorityQueue->Initialize((__COMMON_OBJECT*)lpPriorityQueue);
	if(!bResult)
		goto __TERMINAL;

	lpEvent->lpWaitingQueue      = lpPriorityQueue;
	lpEvent->dwEventStatus       = EVENT_STATUS_OCCUPIED;
	lpEvent->SetEvent            = SetEvent;
	lpEvent->ResetEvent          = ResetEvent;
	lpEvent->WaitForThisObjectEx = WaitForEventObjectEx;
	lpEvent->WaitForThisObject   = WaitForEventObject;
	bResult                      = TRUE;

__TERMINAL:
	if(!bResult)
	{
		if(NULL != lpPriorityQueue)    //Release the priority queue.
			ObjectManager.DestroyObject(&ObjectManager,
			(__COMMON_OBJECT*)lpPriorityQueue);
	}
	return bResult;
}

//
//Event object's uninitializing routine.
//This routine calles priority queue's uninitialize routine to release
//priority queue's resource.
//

VOID EventUninitialize(__COMMON_OBJECT* lpThis)
{
	__EVENT*            lpEvent          = NULL;
	__PRIORITY_QUEUE*   lpPriorityQueue  = NULL;

	if(NULL == lpThis)
		return;

	lpEvent = (__EVENT*)lpThis;
	lpPriorityQueue = lpEvent->lpWaitingQueue;
	if(NULL != lpPriorityQueue)
		ObjectManager.DestroyObject(&ObjectManager,
		(__COMMON_OBJECT*)lpPriorityQueue);          //*******CAUTION!!!************
		//lpPriorityQueue->Uninitialize((__COMMON_OBJECT*)lpPriorityQueue);
	return;
}

//
//The implementation of SetEvent.
//This routine do the following:
// 1. Saves the previous status into a local variable;
// 2. Sets the current status of the event to EVENT_STATUS_FREE;
// 3. Wakes up all kernel thread(s) in it's waiting queue.
// 4. Returns the previous status.
//

static DWORD SetEvent(__COMMON_OBJECT* lpThis)
{
	DWORD                     dwPreviousStatus     = EVENT_STATUS_OCCUPIED;
	__EVENT*                  lpEvent              = NULL;
	__KERNEL_THREAD_OBJECT*   lpKernelThread       = NULL;
	DWORD                     dwFlags              = 0L;

	if(NULL == lpThis)
		return dwPreviousStatus;

	lpEvent = (__EVENT*)lpThis;
	dwPreviousStatus = lpEvent->dwEventStatus;
	//ENTER_CRITICAL_SECTION();
	__ENTER_CRITICAL_SECTION(NULL,dwFlags);
	lpEvent->dwEventStatus = EVENT_STATUS_FREE;    //Set the current status to free.
	//LEAVE_CRITICAL_SECTION();
	__LEAVE_CRITICAL_SECTION(NULL,dwFlags);

	lpKernelThread = (__KERNEL_THREAD_OBJECT*)
		lpEvent->lpWaitingQueue->GetHeaderElement(
		(__COMMON_OBJECT*)lpEvent->lpWaitingQueue,
		NULL);
	while(lpKernelThread)                         //Remove all kernel thread(s) from
		                                          //waiting queue,and insert them into
												  //ready queue of kernel thread,so,they
												  //would be scheduled in appropriate
												  //time.
	{
		lpKernelThread->dwThreadStatus = KERNEL_THREAD_STATUS_READY;
		KernelThreadManager.lpReadyQueue->InsertIntoQueue(
			(__COMMON_OBJECT*)KernelThreadManager.lpReadyQueue,
			(__COMMON_OBJECT*)lpKernelThread,
			lpKernelThread->dwScheduleCounter
			);
		lpKernelThread = (__KERNEL_THREAD_OBJECT*)
			lpEvent->lpWaitingQueue->GetHeaderElement(
			(__COMMON_OBJECT*)lpEvent->lpWaitingQueue,
			NULL);
	}
	return dwPreviousStatus;
}

//
//The implementation of ResetEvent.
//

static DWORD ResetEvent(__COMMON_OBJECT* lpThis)
{
	__EVENT*          lpEvent          = NULL;
	DWORD             dwPreviousStatus = 0L;
	DWORD             dwFlags          = 0L;

	if(NULL == lpThis)
		return dwPreviousStatus;

	lpEvent = (__EVENT*)lpThis;
	dwPreviousStatus = lpEvent->dwEventStatus;
	//ENTER_CRITICAL_SECTION();
	__ENTER_CRITICAL_SECTION(NULL,dwFlags);
	lpEvent->dwEventStatus = EVENT_STATUS_OCCUPIED;
	//LEAVE_CRITICAL_SECTION();
	__LEAVE_CRITICAL_SECTION(NULL,dwFlags);

	return dwPreviousStatus;
}

//
//The implementation of WaitForEventObject.
//

static DWORD WaitForEventObject(__COMMON_OBJECT* lpThis)
{
	__EVENT*                      lpEvent             = NULL;
	__KERNEL_THREAD_OBJECT*       lpKernelThread      = NULL;
	__KERNEL_THREAD_CONTEXT*      lpContext           = NULL;
	DWORD                         dwFlags             = 0L;

	if(NULL == lpThis)
		return OBJECT_WAIT_FAILED;

	lpEvent = (__EVENT*)lpThis;
	//ENTER_CRITICAL_SECTION();
	__ENTER_CRITICAL_SECTION(NULL,dwFlags);
	if(EVENT_STATUS_FREE == lpEvent->dwEventStatus)
	{
		//LEAVE_CRITICAL_SECTION();
		__LEAVE_CRITICAL_SECTION(NULL,dwFlags);
		return OBJECT_WAIT_RESOURCE;
	}
	else
	{
		lpKernelThread = KernelThreadManager.lpCurrentKernelThread;
		//ENTER_CRITICAL_SECTION();
		lpKernelThread->dwThreadStatus = KERNEL_THREAD_STATUS_BLOCKED;  //Once the status of current
		                                                                //kernel thread is set to
		                                                                //BLOCKED,the thread will
		                                                                //never be prompted by system
		                                                                //until it gives up the CPU
		                                                                //by itself,for detail information,
		                                                                //please refer to the schedule
		                                                                //routine.
		//LEAVE_CRITICAL_SECTION();
		__LEAVE_CRITICAL_SECTION(NULL,dwFlags);
		lpEvent->lpWaitingQueue->InsertIntoQueue(
			(__COMMON_OBJECT*)lpEvent->lpWaitingQueue,
			(__COMMON_OBJECT*)lpKernelThread,
			0L);
		lpContext = &lpKernelThread->KernelThreadContext;
		//SwitchTo(lpContext);
		KernelThreadManager.ScheduleFromProc(lpContext);
		//__asm{                  //-------- ** debug ** ------------
		//	mov eax,0x09099090
		//	mov ebx,0x09099090
		//}
	}
	return OBJECT_WAIT_RESOURCE;
}

//
//In the following section we implements the time out waiting operation.
//

typedef struct{
	__EVENT*                   lpEvent;
	__KERNEL_THREAD_OBJECT*    lpKernelThread;
	DWORD                      dwWakeupReason;
}__EVENT_CALLBACK_PARAM;    //A new type used to pass parameters to call back routine.

//
//The implementation of call back routine.
//This routine is called when timer set by WaitForThisObjectEx routine timeout.
//It does the following:
// 1. Try to delete the kernel thread object who calls WaitForThisObjectEx;
// 2. If successful,it means the kernel thread is not waken up yet,so this routine
//    wakes up the kernel thread,set wakeup reason to OBJECT_WAIT_TIME,then return;
// 3. If delete failed,it means the kernel thread is waken up now,so it only returns.
//
static DWORD EventCallback(LPVOID lpParam1)
{
	__EVENT_CALLBACK_PARAM*         lpParam        = (__EVENT_CALLBACK_PARAM*)lpParam1;
	__KERNEL_THREAD_OBJECT*         lpKernelThread = NULL;
	__EVENT*                        lpEvent        = NULL;

	if(NULL == lpParam)    //Parameter validate.
		return 0L;

	lpKernelThread = lpParam->lpKernelThread;
	lpEvent        = lpParam->lpEvent;

	if(!lpEvent->lpWaitingQueue->DeleteFromQueue(    //Try to delete the kernel thread.
		(__COMMON_OBJECT*)lpEvent->lpWaitingQueue,
		(__COMMON_OBJECT*)lpKernelThread))    //The kernel thread is waken up yet.
		return 0L;
	//
	//Delete the kernel thread successfully,so must waken up the kernel thread.
	//
	lpKernelThread->dwThreadStatus = KERNEL_THREAD_STATUS_READY;
	KernelThreadManager.lpReadyQueue->InsertIntoQueue(
		(__COMMON_OBJECT*)KernelThreadManager.lpReadyQueue,
		(__COMMON_OBJECT*)lpKernelThread,
		lpKernelThread->dwScheduleCounter);  //Insert into ready queue.
	lpParam->dwWakeupReason = OBJECT_WAIT_TIMEOUT;
	return 1L;
}

//
//The implementation of WaitForEventObjectEx routine.
//This routine supports time out waiting,that can be used in network protocol's
//implementation.
//
static DWORD WaitForEventObjectEx(__COMMON_OBJECT* lpObject,DWORD dwTimeOut)
{
	__EVENT*                     lpEvent         = (__EVENT*)lpObject;
	__KERNEL_THREAD_OBJECT*      lpKernelThread  = NULL;
	DWORD                        dwFlags         = 0L;
	__EVENT_CALLBACK_PARAM*      lpParam         = NULL;
	__TIMER_OBJECT*              lpTimerObject   = NULL;
	

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
波多野结衣中文字幕一区| 亚洲午夜在线观看视频在线| 韩国欧美国产一区| 欧美成人aa大片| 韩国中文字幕2020精品| 久久久久久久久久电影| 成人理论电影网| 亚洲色图色小说| 欧美日韩不卡一区二区| 国模冰冰炮一区二区| 久久久久国产一区二区三区四区 | 五月天一区二区三区| 欧美区视频在线观看| 精品一区二区三区视频在线观看| 久久亚洲精华国产精华液| 成人av片在线观看| 亚洲国产精品嫩草影院| 精品国产乱码久久久久久牛牛| 国产成人综合网站| 亚洲在线视频网站| 精品日韩欧美一区二区| av高清久久久| 久久成人18免费观看| 综合亚洲深深色噜噜狠狠网站| 91精品国产高清一区二区三区蜜臀| 国产一区二区在线免费观看| 亚洲精品国产视频| 欧美第一区第二区| 在线观看亚洲一区| 国产成人亚洲综合a∨婷婷 | 亚洲成a人v欧美综合天堂下载| 日韩欧美一区在线| av中文字幕不卡| 九九久久精品视频| 一区二区三区四区不卡视频| 久久久蜜桃精品| 91精品婷婷国产综合久久性色 | 欧美性一二三区| 国产综合久久久久久鬼色| 亚洲你懂的在线视频| 精品久久久久久综合日本欧美| 91久久精品一区二区三区| 国内精品嫩模私拍在线| 午夜久久电影网| 亚洲欧美日韩国产中文在线| 欧美精品一区二区久久久| 欧美日韩中文字幕精品| 成人中文字幕电影| 精品中文字幕一区二区小辣椒| 亚洲一本大道在线| 一区二区中文视频| 久久久一区二区三区| 日韩一级片网站| 欧美性xxxxxx少妇| 色狠狠一区二区三区香蕉| 国产999精品久久久久久绿帽| 毛片av中文字幕一区二区| 亚洲国产精品嫩草影院| 一区二区三区四区五区视频在线观看| 中文字幕不卡在线播放| 久久久天堂av| 久久综合999| 26uuu色噜噜精品一区二区| 91精品国产91热久久久做人人| 欧美视频中文字幕| 色偷偷久久一区二区三区| 不卡一区在线观看| 国产成都精品91一区二区三| 国产精品69久久久久水密桃| 激情国产一区二区| 激情深爱一区二区| 久久国内精品视频| 蜜桃一区二区三区在线观看| 日韩成人午夜电影| 婷婷六月综合亚洲| 日本成人中文字幕在线视频| 麻豆视频一区二区| 久久国产精品露脸对白| 青青草91视频| 国产一区二区调教| 国产99久久久精品| 成人a级免费电影| 91丝袜美腿高跟国产极品老师 | 正在播放一区二区| 欧美一区二区精品久久911| 欧美一区二区三区视频| 日韩久久免费av| 久久久久国产精品人| 中文字幕不卡的av| 亚洲三级小视频| 亚洲一区在线视频| 免费成人小视频| 国产乱淫av一区二区三区| 国产凹凸在线观看一区二区| 99综合影院在线| 欧美日韩性生活| 欧美videos大乳护士334| 中文字幕av在线一区二区三区| 亚洲人妖av一区二区| 午夜电影久久久| 国产精品一区二区久久不卡 | 性欧美疯狂xxxxbbbb| 日韩成人一区二区| 国产成人在线免费观看| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 欧美精品一区在线观看| 国产精品女主播av| 亚洲午夜国产一区99re久久| 精品在线一区二区三区| 成人激情文学综合网| 欧美视频在线播放| 2023国产精品自拍| 亚洲欧美福利一区二区| 免费久久精品视频| 暴力调教一区二区三区| 欧美夫妻性生活| 国产免费成人在线视频| 亚洲一二三四在线| 国产麻豆精品视频| 欧美三级电影网| 欧美激情一区二区三区不卡| 午夜激情久久久| 成人国产一区二区三区精品| 欧美一区二区三区免费| 中文字幕亚洲在| 麻豆精品久久精品色综合| 91女人视频在线观看| 精品久久免费看| 亚洲综合一区在线| 国产成人在线影院| 91麻豆精品国产91久久久资源速度 | 国产精品香蕉一区二区三区| 欧美日本一区二区三区| 国产蜜臀av在线一区二区三区| 青草国产精品久久久久久| 欧洲精品中文字幕| 国产三级一区二区三区| 日本v片在线高清不卡在线观看| 99天天综合性| 欧美激情在线免费观看| 久久av资源网| 欧美久久免费观看| 亚洲三级理论片| caoporn国产一区二区| 精品国产91乱码一区二区三区| 午夜精品久久久久久久99水蜜桃 | 在线中文字幕一区| 国产精品丝袜久久久久久app| 美国欧美日韩国产在线播放| 欧美日韩中文字幕一区| 亚洲精品福利视频网站| 97se狠狠狠综合亚洲狠狠| 中文字幕免费不卡| 国产在线观看一区二区| 日韩精品一区二区三区在线观看| 亚洲香蕉伊在人在线观| 欧美在线|欧美| 一区二区三区四区亚洲| 色哟哟一区二区在线观看| 亚洲男人的天堂在线aⅴ视频| 成人黄色av网站在线| 国产精品色一区二区三区| 高清不卡在线观看av| 久久精品一区蜜桃臀影院| 国产精品自产自拍| 欧美国产精品一区| 成人性生交大片免费看视频在线 | 久久久另类综合| 国产精品亚洲一区二区三区在线| 久久综合av免费| 国产传媒日韩欧美成人| 亚洲国产精品精华液ab| 成人免费看片app下载| 国产欧美一区二区精品秋霞影院| 国产精品一二三区| 中文在线一区二区| eeuss鲁一区二区三区| 一区二区三区在线视频免费观看 | 精品无人区卡一卡二卡三乱码免费卡| 日韩一区二区影院| 激情综合色丁香一区二区| 精品国产凹凸成av人导航| 国产美女精品一区二区三区| 中文字幕av一区二区三区免费看| 97久久超碰国产精品电影| 亚洲国产精品一区二区久久恐怖片| 欧美一区二区三区在线视频| 国产在线视频一区二区| 国产精品乱码一区二区三区软件| 91视频在线观看| 日韩黄色免费电影| 久久精品一区二区三区不卡| 色综合 综合色| 日韩精品欧美成人高清一区二区| 精品成人一区二区三区四区| www.av亚洲| 日韩av一区二| 国产精品麻豆一区二区| 欧美日韩精品免费| 国产一区二区中文字幕|