实践15哲学家进餐问题_第1页
实践15哲学家进餐问题_第2页
实践15哲学家进餐问题_第3页
实践15哲学家进餐问题_第4页
实践15哲学家进餐问题_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实践15 哲学家进餐问题1 .实践内容说明(1)在函数中使用图形方式显示哲学家进餐问题,每个哲学家使用一个线程控制,随机 进行进餐或者思考,使用互斥量和事件进行同步和互斥控制。2 .程序性质(1) Windows和控制台混合应用程序(2)多线程3 .运行环境设置(1)建立项目 在Visual C+开发环境,单击New菜单,弹出New对话框;在New对话框中选择Project标签切换至Project标签页;在Project标签页的项目列表中选择Win32 Application 选项,Location 输入框输入项目所在的路径,或者单击输入框右侧的按钮,在弹出的 Choose Directory

2、对话框中选择项目所在的磁盘分区和所在的目录;在Project 标签页的Project name输入框中输入项目名称;Project标签页中的其他选项保持默认选择(单选框 Create new workspace 前有黑点,Platforms 选项框中 Win32 前打勾),完成设置界面如图 10所示。图10设置项目为 Windows应用完成设置后单击 OK, New对话框关闭,弹出 Win32 Console Application - Step 1 of 1 对话框。 在 Win32 Console Application - Step 1 of 1 对话框中选择 An empty proj

3、ect 单选项。Win32 Console Application - Step 1 of 1对话框如图 11 所示。图11说明刚建立的项目为空项目完成 Win32 Console Application-Step 1 of 1 对话框后单击 Finish 按钮,Win32Console Application - Step 1 of 1 对话框关闭,弹出 New Project Information 对话 框。New Project Information对话框中显示了当前建立项目的一些信息。New ProjectInformation 对话框如图12 所示。图12显示新项目信息单击 Ne

4、w Project Information对话框中的 OK 按钮,关闭 New Project Information 对话框,项目建立步骤完成。(2)建立文件 单击File 菜单中的New菜单项,弹出New对话框。 在New对话框中单 击Files 标签,切换至Files 标签页; 在Files 标签页的文件列表中选择 C+ Source File 选项,在File 输入框中输入文件名。New对话框设置如图13所示。图13在新建的项目中建立一个C文件完成New对话框设置后,单击OK按钮关闭New对话框,在项目中创建文件步骤完成。(3)输入文件 在创建的文件窗口中输入要调试运行的操作系统源文件

5、。(4)修改编译设置 单击Project菜单中的Settings菜单项,弹出Project Settings 对话框。在 Project Settings 对话框中单击 C/C+标签,切换至 C/C+标签页;在 C/C+ 标签页中的Category 下拉列表选 择框中选择 Code Generation 选择项;在Use run-time library下拉列表选择框中选择Debug Multithreaded DLL选项。设置界面如图14所示。图14设置成多线程环境完成设置后单击 OK按钮关闭Project Settings 对话框。(5)编译运行 单击Build 菜单中的Rebuild A

6、ll菜单项编译项目,或者单击工具栏中Build Minibar 工具栏的Build工具按钮编译项目。Build Minibar工具栏形状为,Build工具按钮对应的图标为,对应的快捷键是F7。4实现程序#include<>#include <>#include<>#include<>#define DEGRESS_TO_RADIAN(x) (x) * / 180typedef structHWND hWnd; sEating = 1)MoveToEx(hDC,philXi+PHIL_DIAMETER/2,philYi+PHIL_DIAMETER

7、/2,NULL);LineTo(hDC, pParami.chopXY2, pParami.chopXY3);MoveToEx(hDC,philXi+PHIL_DIAMETER/2,philYi+PHIL_DIAMETER /2,NULL );LineTo(hDC, pParami.chopXY6, pParami.chopXY7);elsehPenWhite = CreatePen(PS_SOLID, 3, RGB(255, 255, 255);hOldPen = (struct HPEN_*)SelectObject(hDC,hPenWhite);MoveToEx(hDC,philXi+P

8、HIL_DIAMETER/2,philYi+PHIL_DIAMETER/2,NULL);/2, NULL);LineTo(hDC, pParami.chopXY2, pParami.chopXY3);MoveToEx(hDC,philXi+PHIL_DIAMETER/2,philYi+PHIL_DIAMETERLineTo(hDC, pParami.chopXY6, pParami.chopXY7);SelectObject(hDC, hOldPen);DeleteObject(hPenWhite);d = i;TextOut(hDC, 20, 20, "press s”, 7 );

9、EndPaint(hWnd,&paintStruct);pParami.hWnd = hWnd;left = i;right = (i+1) % PHIL_NUM;pParami.chopXY0=chopStartXleft; hopXY1=chopStartYleft;hopXY2 = chopEndXleft;hopXY3 = chopEndYleft;hopXY4chopStartXright; hopXY5=chopStartYright; hopXY6=chopEndXright;hopXY7 = chopEndYright; sEating = 0;hThreadi=(HA

10、NDLE)_beginthreadex(NULL,0,DineMany,&pParami,0, NULL);事件有信InvalidateRect(hWnd,NULL,FALSE); SetEvent(hEvent); / 号break;case WM_CLOSE:for(i=0; i<PHIL_NUM; i+) CloseHandle(hThreadi);DestroyWindow(hWnd);break;case WM_DESTROY: PostQuitMessage(0);break;default :return DefWindowProc(hWnd,uMsgId,wPar

11、am,lParam); return 0; unsigned int _stdcall DineMany(LPVOID pParam)PARAM *m_pParam = (PARAM*)pParam;int left, right;int TimeDelay = TIME, SleepTime;BOOL canDine = FALSE;WaitForSingleObject(hEvent, INFINITE);left = m_pParam->Id ;right = (m_pParam->Id + 1) % PHIL_NUM;while(TimeDelay > 0)(Wait

12、ForSingleObject(hMutex, INFINITE);if(FALSE = chopSticksleft && FALSE = chopSticksright) (chopSticksleft = TRUE;chopSticksright = TRUE;canDine = TRUE;)ReleaseMutex(hMutex);if(TRUE = canDine)m_pParam->isEating = 1;InvalidateRect(m_pParam->hWnd,NULL,FALSE);srand(unsigned)time(NULL);SleepTime = (rand() % 250 +250) - (rand() % 250 -250) / 2 ;Sleep(SleepTime);TimeDelay = TimeDelay - SleepTime;WaitForSingleObject(hMutex, INFINITE);chopSticksleft = FALSE;chopSticksright = FALSE;ReleaseMutex(hMutex);canDine = FALSE;m_pParam->isEating = 0;SetEvent(hEvent);)i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论