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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? synobj.cpp

?? 小型的操作系統開發的原代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//***********************************************************************/
//    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;
	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产一区二区三区香蕉| 欧美日本精品一区二区三区| 一区二区免费在线播放| 久久久久免费观看| 欧美zozo另类异族| 91精品国产日韩91久久久久久| 中文字幕第一区二区| 久久午夜免费电影| 国产精品久久久久7777按摩| 欧美激情一区二区三区四区| 天堂久久久久va久久久久| 亚洲一区二区中文在线| 亚洲国产日韩a在线播放性色| 亚洲国产精品久久人人爱| 成人在线视频首页| 91论坛在线播放| 色999日韩国产欧美一区二区| 91麻豆6部合集magnet| 国产欧美日韩一区二区三区在线观看 | 国产精品国产精品国产专区不片| 天堂av在线一区| 欧美日韩久久一区| 亚洲成人资源网| 国产乱理伦片在线观看夜一区| 久久69国产一区二区蜜臀| 久久不见久久见免费视频1| 成人免费高清视频| 日本一区二区三区四区| 国产一区二区精品久久91| 91麻豆国产在线观看| 国产精品萝li| 免费日本视频一区| 成人丝袜18视频在线观看| 国产亚洲美州欧州综合国| 亚洲一卡二卡三卡四卡无卡久久| 91久久奴性调教| 一区av在线播放| 欧美日韩色一区| 国产日本一区二区| 成人av网在线| 精品粉嫩超白一线天av| 亚洲午夜在线观看视频在线| 欧美亚洲愉拍一区二区| 国产精品女人毛片| 91原创在线视频| 亚洲图片一区二区| 日韩一级免费观看| 亚洲mv大片欧洲mv大片精品| 欧美理论电影在线| 亚洲色图制服丝袜| 国产一区 二区| 亚洲欧洲日韩综合一区二区| 国产综合久久久久影院| 欧美一级一级性生活免费录像| 美女视频一区二区三区| 欧美视频三区在线播放| 奇米影视一区二区三区| 国产女主播一区| 欧日韩精品视频| 亚洲自拍偷拍网站| 2023国产精品自拍| 色综合久久综合网欧美综合网| 久久久一区二区三区| 91在线观看免费视频| 蜜芽一区二区三区| 国产精品久线在线观看| 欧美精品乱码久久久久久按摩| 国产乱子轮精品视频| 亚洲另类中文字| 91国产福利在线| 国产福利不卡视频| 欧美国产日产图区| 777亚洲妇女| 蜜臀av在线播放一区二区三区 | 精品亚洲porn| 依依成人精品视频| wwww国产精品欧美| 884aa四虎影成人精品一区| 粉嫩一区二区三区性色av| 国产欧美日韩视频一区二区| 在线一区二区三区四区| 成人午夜在线视频| 久久99精品一区二区三区三区| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 成人久久18免费网站麻豆| 日本怡春院一区二区| 69堂精品视频| 91丨porny丨首页| 国产精品1024久久| 精品制服美女丁香| 日日夜夜免费精品| 伊人色综合久久天天人手人婷| 久久美女艺术照精彩视频福利播放| 欧美丝袜自拍制服另类| 成人国产精品免费网站| 国产一级精品在线| 麻豆极品一区二区三区| 天涯成人国产亚洲精品一区av| 日韩欧美不卡在线观看视频| 国产一级精品在线| 另类小说欧美激情| 奇米影视7777精品一区二区| 亚洲福利视频一区二区| 亚洲激情图片小说视频| 亚洲人xxxx| 日韩欧美成人午夜| 日韩一区二区免费在线观看| 欧美日韩一区高清| 欧美人成免费网站| 欧美日韩国产一级片| 欧美日韩一区二区三区四区五区 | 午夜a成v人精品| 亚洲午夜精品在线| 亚洲亚洲人成综合网络| 亚洲小说春色综合另类电影| 亚洲综合偷拍欧美一区色| 亚洲人成网站在线| 亚洲一区在线视频| 同产精品九九九| 蜜桃视频一区二区三区在线观看| 男人的j进女人的j一区| 久久激情五月激情| 黄网站免费久久| 懂色av一区二区三区蜜臀| aaa欧美大片| 韩国精品主播一区二区在线观看| 看电视剧不卡顿的网站| 国产麻豆一精品一av一免费| 国产丶欧美丶日本不卡视频| 成人亚洲一区二区一| 91理论电影在线观看| 欧美视频一区在线观看| 在线播放一区二区三区| 精品剧情在线观看| 中文字幕成人av| 亚洲成人av电影在线| 久久91精品久久久久久秒播| 成人黄色免费短视频| 色久综合一二码| 日韩视频免费观看高清完整版在线观看| 极品尤物av久久免费看| 成人av免费在线| 欧美一区二区三区在线视频| 国产区在线观看成人精品| 亚洲女同ⅹxx女同tv| 久久99精品国产.久久久久| 成人激情午夜影院| 欧美一区二区三区视频在线观看| 国产欧美精品国产国产专区| 亚洲成a人在线观看| 国产一区二区看久久| 欧美色图12p| 久久久精品免费免费| 亚洲成av人片观看| 国产乱子轮精品视频| 欧美调教femdomvk| 国产日韩欧美一区二区三区综合 | 国内成+人亚洲+欧美+综合在线| 不卡视频在线观看| 欧美一区二区三区婷婷月色 | 一本在线高清不卡dvd| 欧美一级一区二区| 一区二区三区欧美亚洲| 久久国产婷婷国产香蕉| 91久久国产综合久久| 国产欧美日韩三级| 日本不卡一区二区三区高清视频| 99国产精品久久久久久久久久久| 成人av第一页| 精品国产免费人成电影在线观看四季 | 欧美影院午夜播放| 久久精品综合网| 蜜桃一区二区三区在线| 欧美午夜片在线观看| 国产精品久久久久久久久久免费看 | 在线观看亚洲一区| 日本一区免费视频| 激情成人综合网| 91精品一区二区三区在线观看| 亚洲黄网站在线观看| 丁香五精品蜜臀久久久久99网站| 日韩美女天天操| 日本亚洲欧美天堂免费| 欧美丰满高潮xxxx喷水动漫| 亚洲黄色免费电影| 色欧美日韩亚洲| 亚洲欧美日韩在线不卡| 不卡一区二区在线| 国产精品视频一二| 成人a级免费电影| 国产精品天美传媒| 99久久久精品免费观看国产蜜| 国产日韩欧美一区二区三区乱码 | 国产天堂亚洲国产碰碰| 久草这里只有精品视频| 日韩视频免费直播| 九色综合国产一区二区三区| 精品久久一区二区三区| 国产一区视频网站| 欧美国产1区2区|