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

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

?? dining.c

?? Windows多線程編碼隨書源碼
?? C
字號:
/*
 * Dining.c
 *
 * Sample code for "Multithreading Applications in Win32"
 * This sample is discussed in Chapter 4.
 *
 * Graphically demonstrates the problem of the
 * dining philosophers.
 */

#define WIN32_LEAN_AND_MEAN
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <windowsx.h>
#include <string.h>
#include <math.h>
#include "dining.h"

HINSTANCE 	hInst;			// Application Instance Handle
HWND   	hWndMain;       	// Main Window Handle                             
HBITMAP	hbmpOffscreen;

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void RenderOffscreen(HDC hDestDC);

BOOL bWaitMultiple;
BOOL bFastFood;

extern int gDinerState[];
extern int gChopstickState[];
extern HANDLE gchopStick[PHILOSOPHERS];	// 1 chopstick between each philopher and his neighbor

/********************************************************************/
/*	ROUTINE:	WndProc												*/
/*																	*/
/*	PURPOSE:	Processes messages									*/
/********************************************************************/

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, 
	WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT ps;
	HDC hdc;

	switch (message) 
	{
		case WM_COMMAND:
			switch (wParam) 
			{
			case CM_EXIT:
				PostMessage(hWndMain, WM_CLOSE, 0, 0L);
				break;  
			} 
			break;

		case WM_FORCE_REPAINT:
			{
				MSG msg;

				InvalidateRect(hWndMain, NULL, TRUE);
				while (PeekMessage(&msg, hWndMain, WM_FORCE_REPAINT,WM_FORCE_REPAINT,TRUE))
					;
			}
			break;

		case WM_PAINT:
			
			hdc = BeginPaint(hWndMain, &ps);

			RenderOffscreen(hdc);
			
			EndPaint(hWndMain, &ps);
			break;

		case WM_CLOSE:
			return DefWindowProc(hWndMain, message, wParam, lParam);

		case WM_DESTROY:
			PostQuitMessage(0);
			break;

		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
}
	return (0);
}

BOOL CreateOffscreen()
{
	HWND hwndScreen = GetDesktopWindow();
	HDC hdc	= GetDC(hwndScreen);

	int	nWidth	= GetSystemMetrics( SM_CXSCREEN );
	int	nHeight	= GetSystemMetrics( SM_CYSCREEN );

	hbmpOffscreen = CreateCompatibleBitmap( hdc, nWidth, nHeight );

	ReleaseDC(hwndScreen, hdc);

	if ( !hbmpOffscreen )
		return FALSE;
	else
		return TRUE;
}

void RenderOffscreen(HDC hDestDC)
{
	HDC hdc				= hDestDC; // CreateCompatibleDC(hWndMain);
	int err=GetLastError();
	HBITMAP hOldBitmap	= SelectObject(hdc, hbmpOffscreen);
	RECT rect;
	HPEN hPen;
	double dx, dy, px, py,  AngRad, dDeltaAng;
	int pos, p1;
	long CenterX, CenterY;

	hPen = SelectObject(hdc, CreatePen(PS_SOLID, 3, 0L));

	GetClientRect(hWndMain, &rect);

	/* Draw the table */
	CenterX = (rect.right - rect.left)/2;
	CenterY = (rect.bottom - rect.top)/2;
	Ellipse(hdc, CenterX - 100, CenterY - 100, CenterX + 100, CenterY + 100);

	/* Draw the chopsticks */
	dDeltaAng = 360 / PHILOSOPHERS;
	for (pos = 0; pos < PHILOSOPHERS; pos++)	//FIXIT
	{
		/* Draw the chopsticks */
		AngRad = (pos * dDeltaAng)/57.29577951;
		dx = CenterX + (sin(AngRad)*60);
		dy = CenterY - (cos(AngRad)*60);
		MoveToEx(hdc, (int)dx, (int)dy, NULL);
		dx = CenterX + (sin(AngRad)*85);
		dy = CenterY - (cos(AngRad)*85);
		LineTo(hdc, (int)dx, (int)dy);

		//Draw the plate
		AngRad = ((pos * dDeltaAng+dDeltaAng / 2))/57.29577951;
		dx = CenterX + (sin(AngRad) * 72);
		dy = CenterY - (cos(AngRad) * 72);
		Ellipse(hdc, (int)dx-12, (int)dy-12, (int)dx+12, (int)dy+12);
	}

	/* delete the black pen */
	DeleteObject(SelectObject(hdc, hPen));

	/* Draw the philosophers */
	for(pos = 0; pos < PHILOSOPHERS; pos++)
	{
		/* select a pen for each philosopher */
		switch (gDinerState[pos])
		{
		case RESTING:
			hPen = SelectObject(hdc, CreatePen(PS_SOLID, 3, RGB(0, 255, 0)));
			break;

		case WAITING:
		case EATING:
			hPen = SelectObject(hdc, CreatePen(PS_SOLID, 3, RGB(255, 0, 0)));
			break;

		default:
			hPen = SelectObject(hdc, CreatePen(PS_SOLID, 3, 0L));
		}

		AngRad = ((pos * dDeltaAng) + dDeltaAng / 2)/57.29577951;
		px = CenterX + (sin(AngRad)*150);
		py = CenterY - (cos(AngRad)*150);

		/* Draw the Philosopher */
		Ellipse(hdc, (int)px-25, (int)py-25, (int)px+25, (int)py+25);

		//Draw the left arm
		if (gChopstickState[pos] == pos)
		{
			MoveToEx(hdc, (int)px, (int)py, NULL);
			AngRad = (pos * dDeltaAng)/57.29577951;
			dx = CenterX + (sin(AngRad)*85);
			dy = CenterY - (cos(AngRad)*85);
			LineTo(hdc, (int)dx, (int)dy);
		}

		//Draw the right arm
		p1 = pos + 1;
		if (p1 == PHILOSOPHERS)
			p1 = 0;
		if (gChopstickState[p1] == pos)
		{
			MoveToEx(hdc, (int)px, (int)py, NULL);
			AngRad = (p1 * dDeltaAng)/57.29577951;
			dx = CenterX + (sin(AngRad)*85);
			dy = CenterY - (cos(AngRad)*85);
			LineTo(hdc, (int)dx, (int)dy);
		}

		/* Delete the pen */
		DeleteObject(SelectObject(hdc, hPen));			
	}	//for pos

	BitBlt( hDestDC,
				rect.left,
				rect.top,
				rect.right - rect.left,
				rect.bottom-rect.top,
				hdc,
				rect.left,
				rect.top,
				SRCCOPY
			);
	GetLastError();

	SelectObject(hdc, hOldBitmap);

//	DeleteDC(hWndMain, hdc);
}

/********************************************************************/
/*	ROUTINE:	InitApplication										*/
/*																	*/
/*	PURPOSE:	Initialize the application							*/
/********************************************************************/

BOOL InitApplication(HINSTANCE hInstance)
{
	WNDCLASS  wc;

	wc.style = CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc = WndProc;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.hInstance = hInstance;
	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); 
	wc.lpszMenuName =  "din";
	wc.lpszClassName = "dinWClass";

	RegisterClass(&wc);

	return TRUE;
}


/********************************************************************/
/* ROUTINE:  InitInstance											*/
/*																	*/
/* PURPOSE:  Saves instance handle and creates main window			*/
/********************************************************************/

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
	int ret;

	hInst = hInstance;

	hWndMain = CreateWindow(
		"dinWClass",
		"Dining Philosopher",
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		450,
		450,
		NULL, NULL, hInstance, NULL );

	if (!hWndMain)
		return FALSE;

	ShowWindow(hWndMain, nCmdShow);
	UpdateWindow(hWndMain);

	if (!CreateOffscreen())
		PostQuitMessage(1);

	ret = MessageBox(hWndMain, "Do you want to use WaitForMultipleObjects()?\n\n"
		"If you select Yes, then the application will run all day.\n"
		"If you select No, then the application can deadlock.\n",
		"Wait Mode", MB_YESNO);
	if (ret == IDYES)
		bWaitMultiple = TRUE;
	else
	{
		bWaitMultiple = FALSE;

		ret = MessageBox(hWndMain, "Do you want fast philosophers?\n\n"
			"If you select Yes, then it will deadlock much faster.\n",
			"Wait Mode", MB_YESNO);
		if (ret == IDYES)
			bFastFood = TRUE;
		else
			bFastFood = FALSE;
	}

	// Start the threads
	Diner();

	return TRUE;
}

/********************************************************************/
/* FUNCTION: WinMain												*/
/*																	*/
/* PURPOSE: Calls initialization function, processes message loop	*/
/********************************************************************/

int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
	LPSTR lpCmdLine, int nCmdShow)
{
	MSG msg;
	int i;

	if (!hPrevInstance)
		if (!InitApplication(hInstance))
	   		return (FALSE);

	if (!InitInstance(hInstance, nCmdShow))
  		return (FALSE);

	while (GetMessage(&msg, NULL, 0, 0)) 
	{
		TranslateMessage(&msg);
	 	DispatchMessage(&msg); 
	}
	// Clear the table
	for (i = 0; i < PHILOSOPHERS; i++)
		CloseHandle(gchopStick[i]);
  
	return (msg.wParam);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月天中文字幕一区二区| 亚洲小少妇裸体bbw| 久久机这里只有精品| 欧美日本在线播放| 午夜精品在线看| 在线综合视频播放| 免费观看91视频大全| 精品国产成人在线影院 | 91精品中文字幕一区二区三区| 亚洲一二三四在线观看| 欧美区在线观看| 精品一区免费av| 亚洲国产精品精华液ab| 91视频.com| 亚洲成人在线观看视频| 日韩一区国产二区欧美三区| 国产一区激情在线| 国产精品久久久久久久久久久免费看 | 欧美日韩精品一区二区天天拍小说| 日韩高清不卡在线| 精品成人佐山爱一区二区| 高清不卡一区二区| 一区二区在线电影| 精品久久久久久久久久久久久久久 | 日韩精品电影在线| 日韩av一区二区在线影视| 国产高清亚洲一区| 欧美xxxxxxxx| 国产精品视频免费| 国产91综合网| 91老司机福利 在线| 久久久久久99精品| 91久久精品午夜一区二区| 美女脱光内衣内裤视频久久网站| 国产日韩欧美在线一区| 91福利资源站| 丁香五精品蜜臀久久久久99网站 | 国产精品久久福利| 911精品产国品一二三产区| 国产精品中文字幕一区二区三区| 亚洲欧美日韩系列| 欧美成人性福生活免费看| 99久久精品免费看国产免费软件| 首页国产丝袜综合| 亚洲欧洲三级电影| 欧美变态口味重另类| 91免费观看视频在线| 加勒比av一区二区| 一区二区三区视频在线看| 久久欧美中文字幕| 欧美日韩一区三区四区| aaa欧美色吧激情视频| 久久精品国产一区二区三| 亚洲品质自拍视频| 国产欧美一区二区三区网站| 在线播放亚洲一区| 在线亚洲欧美专区二区| 成人精品一区二区三区中文字幕| 美女视频第一区二区三区免费观看网站| 亚洲欧美日韩一区二区| 国产女同性恋一区二区| 精品久久国产老人久久综合| 777a∨成人精品桃花网| 色综合夜色一区| 岛国av在线一区| 粉嫩嫩av羞羞动漫久久久| 久久国产生活片100| 亚洲一级二级在线| 亚洲日本免费电影| 国产精品美女久久久久久久久久久| 欧美xingq一区二区| 日韩欧美高清dvd碟片| 7777女厕盗摄久久久| 欧美理论在线播放| 欧美视频一区在线| 日本乱人伦一区| 91极品视觉盛宴| 欧美午夜宅男影院| 久久综合狠狠综合久久综合88| 欧美xxx久久| 精品久久久久久久久久久久久久久| 日韩午夜电影av| 欧美电影免费观看高清完整版 | 国产成人av一区二区三区在线 | 国产美女精品人人做人人爽| 精品一区二区av| 国产一区二区三区免费观看| 国产主播一区二区三区| 精品在线观看免费| 国产激情91久久精品导航| 成人网在线播放| 色婷婷亚洲一区二区三区| 91极品视觉盛宴| 欧美久久久久久久久| 日韩欧美不卡在线观看视频| 精品久久久久久久久久久久包黑料| 久久久亚洲精品一区二区三区| 日本一区二区视频在线观看| 亚洲天堂免费在线观看视频| 亚洲综合色成人| 视频一区二区国产| 麻豆精品久久久| 成人午夜大片免费观看| 91视频在线观看| 欧美一级片免费看| 久久夜色精品国产噜噜av| 欧美国产视频在线| 亚洲一区在线视频| 激情亚洲综合在线| 91丝袜国产在线播放| 欧美午夜电影在线播放| 欧美变态tickle挠乳网站| 综合分类小说区另类春色亚洲小说欧美| 一区二区三区欧美日| 韩国三级在线一区| 91在线视频观看| 日韩一区二区三| 国产精品麻豆网站| 亚洲国产人成综合网站| 九九精品一区二区| 欧美日韩视频不卡| 欧美精品日韩一区| 欧美激情综合网| 国产在线精品一区在线观看麻豆| 99免费精品在线| 欧美精品第1页| 中文字幕 久热精品 视频在线 | 欧美在线视频日韩| 欧美亚一区二区| 亚洲精品一区二区三区四区高清| 中文字幕中文在线不卡住| 午夜精品一区在线观看| 成人视屏免费看| 91精品在线一区二区| 国产精品九色蝌蚪自拍| 美女脱光内衣内裤视频久久网站| 一本久久综合亚洲鲁鲁五月天 | 亚洲不卡av一区二区三区| 精品一区二区在线播放| 在线视频欧美区| 国产日韩亚洲欧美综合| 亚洲午夜精品网| 色婷婷亚洲综合| 国产精品看片你懂得| 国产精品影视在线| 精品国产电影一区二区 | 青青国产91久久久久久 | 色琪琪一区二区三区亚洲区| 欧美成人精品福利| 成人av手机在线观看| 欧美日韩三级视频| 国产成人av电影| 日韩天堂在线观看| 亚洲免费av在线| 成人动漫中文字幕| 日日夜夜免费精品视频| 日本中文字幕一区二区视频| 久久99久久99小草精品免视看| 国产91在线看| 久久久久一区二区三区四区| 麻豆精品国产91久久久久久| 欧美日韩一二三| 亚洲一区中文在线| 日本丶国产丶欧美色综合| 中文字幕av资源一区| 国内精品久久久久影院薰衣草| 欧美疯狂性受xxxxx喷水图片| 亚洲精品水蜜桃| 99精品视频在线免费观看| 欧美激情中文不卡| 国产一区中文字幕| 久久久噜噜噜久久中文字幕色伊伊| 高清日韩电视剧大全免费| 亚洲精品成人悠悠色影视| 在线播放91灌醉迷j高跟美女 | 欧美电影影音先锋| 丝袜美腿亚洲色图| 国产精品灌醉下药二区| 欧美久久高跟鞋激| 高清不卡一二三区| 丝袜亚洲精品中文字幕一区| 久久国产精品无码网站| 99久久777色| 97精品电影院| 日韩精品自拍偷拍| 国模一区二区三区白浆| 26uuu成人网一区二区三区| 国产毛片精品视频| 亚洲国产精品精华液2区45| 99免费精品视频| 亚洲宅男天堂在线观看无病毒| 欧美日韩国产综合视频在线观看| 五月综合激情日本mⅴ| 日韩一区二区在线播放| 国产乱码精品一区二区三区忘忧草| 欧美激情一区二区三区全黄| 一本一道久久a久久精品综合蜜臀| 亚洲综合999| 欧美sm美女调教| 成人免费视频播放|