- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
黄淮学院信息工程学院
___操作系统__课程 实验报告
实验项目名称 CEevent类使用 实验日期 2016.04.19 学生学号 1434110111 学生姓名 付和平 专业班级 计科1401B 实验地点 1#615 实验类型 □验证型 □设计型
□综合型 学 时 2 同组人员 列出同组实验者;如无,则填“无” 一、实验目的及要求(本实验所涉及并要求掌握的知识点) 进程的同步问题是操作系统处理机管理的一大核心问题,为了更好的理解和掌握操作系统管理的思想,现通过临界区的互斥访问来了解对临界资源的处理过程。
学习VC++6.0线程控制,培养和提高学生的编程能力。
二、实验环境(本实验所使用的硬件设备和相关软件)
Pc win7操作系统
Vc++6.0实验平台
三、实验内容及步骤
建立一个基于对话框的工程MultiThread9,在对话框IDD_MULTITHREAD9_DIALOG中加入一个按钮和两个编辑框控件,按钮的ID为IDC_WRITEW,标题为“写‘W’”;两个编辑框的ID分别为IDC_W和IDC_D,属性都选中Read-only;
在MultiThread9Dlg.h文件中声明两个线程函数:
UINT WriteW(LPVOID pParam);
UINT WriteD(LPVOID pParam);
使用ClassWizard分别给IDC_W和IDC_D添加CEdit类变量m_ctrlW和m_ctrlD;
在MultiThread9Dlg.cpp文件中添加如下内容:
为了文件中能够正确使用同步类,在文件开头添加
#include afxmt.h
定义事件对象和一个字符数组,为了能够在不同线程间使用,定义为全局变量。
CEvent eventWriteD;
char g_Array[10];
添加线程函数:
UINT WriteW(LPVOID pParam)
{
CEdit *pEdit=(CEdit*)pParam;
pEdit-SetWindowText();
for(int i=0;i10;i++)
{
g_Array[i]=W;
pEdit-SetWindowText(g_Array);
Sleep(1000);
}
eventWriteD.SetEvent();
return 0;
}
UINT WriteD(LPVOID pParam)
{
CEdit *pEdit=(CEdit*)pParam;
pEdit-SetWindowText();
WaitForSingleObject(eventWriteD.m_hObject,INFINITE);
for(int i=0;i10;i++)
{
g_Array[i]=D;
pEdit-SetWindowText(g_Array);
Sleep(1000);
}
return 0;
}
仔细分析这两个线程函数, 您就会正确理解CEvent 类。线程WriteD执行到 WaitForSingleObject(eventWriteD.m_hObject,INFINITE);处等待,直到事件eventWriteD为有信号该线程才往下执行,因为eventWriteD对象是自动事件,则当WaitForSingleObject()返回时,系统自动把eventWriteD对象重置为无信号状态。
双击按钮IDC_WRITEW,添加其响应函数:
void CMultiThread9Dlg::OnWritew()
{
CWinThread *pWriteW=AfxBeginThread(WriteW,
m_ctrlW,
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED);
pWriteW-ResumeThread();
CWinThread *pWriteD=AfxBeginThread(WriteD,
m_ctrlD,
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED);
pWriteD-ResumeThread();
}
编译并运行程序,单击“写‘W’”按钮,体会事件对象的作用。
四、实验结果(本实验源程序清单及运行结果或实验结论、实验设计图)
五、实验总结(对本实验结果进行分析,实验心得体会及改进意见)
一个手工CEvent对象存在于由ResetEvent 或SetEvent设置的状态中,直到另一个函数被调用。一个自动CEvent对象在至少一个线程
文档评论(0)