ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:45.94KB ,
资源ID:26794609      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26794609.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验报告六.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验报告六.docx

1、实验报告六攀 枝 花 学 院 实 验 报 告实验课程:Visual C#.NET程序设计教程 实验项目:上机实验9 实验日期:2015.05.26系:数计学院 成绩: 1、实验目的1.理解线程的概念。2.了解线程的状态和生命周期。3.掌握使用Thread类来创建线程的方法。4.理解线程同步的含义,掌握线程同步的方法。二、实验要求1.熟悉Visual Studio.Net2010的基本操作方法。2.认真阅读本章相关内容,尤其是案例。3.实验前进行程序设计,完成源程序的编写任务。4.反复操作,直到不需要参考教材、能熟练操作为止。 3、实验步骤1.设计一个Windows应用程序,用多线程实现一个简单

2、的计算器,用来计算指定范围内数中素数的个数,并用sendmessage 发送消息返回素数的个数并显示进度。源程序如下:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Threading;namespace MultiThreadDemo public partial c

3、lass MainFrom : Form private Primes p; public MainFrom() InitializeComponent(); private void btnOK_Click(object sender, EventArgs e) p = new Primes(Convert.ToInt32(this.textBox1.Text.Trim(); p.OnStart += new Primes.ComputeStart(p_OnStart); p.OnFinished += new Primes.ComputeFinished(p_OnFinished); Th

4、read bkThread = new Thread(new ParameterizedThreadStart(ThreadProc); bkThread.Start(new ThreadParam(this.Handle); public void ThreadProc(object objParams) ThreadParam param = objParams as ThreadParam; p.ComputePrimeNum(param); void p_OnFinished(int _primeNum) this.lblShow.Text = string.Format(The pr

5、ime number is: 0,_primeNum); void p_OnStart() this.lblShow.Text = Compute started.; this.pgbCompute.Maximum = p.MaxNum; this.pgbCompute.Minimum = 0; void p_OnProgress(int _prog) this.pgbCompute.Value = _prog; protected override void DefWndProc(ref Message m) switch (m.Msg) case Win32.WM_COMPUTESTART

6、: p_OnStart(); return; case Win32.WM_COMPUTEPROGRESS: p_OnProgress(int)m.LParam); return; case Win32.WM_COMPUTEFINISHED: p_OnFinished(int)m.LParam); return; base.DefWndProc(ref m); prime类using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespac

7、e MultiThreadDemo class Prime public static bool IsPrime(int _num) for (int i = 2; i _num/2; i+) if (_num % i = 0) return false; return true; public class Primes private int _primeNum = 0; private int _maxNum; public delegate void ComputeStart(); public delegate void ComputeFinished(int _primeNum);

8、public event ComputeStart OnStart; public event ComputeFinished OnFinished; public Primes(int maxNum) _maxNum = maxNum; public int MaxNum get return _maxNum; public void ComputePrimeNum(ThreadParam param) IntPtr hWnd=param.MainWndHandle; Win32.PostMessage(hWnd, Win32.WM_COMPUTESTART, IntPtr.Zero, In

9、tPtr.Zero); for (int i = 2; i =_maxNum; i+) Win32.PostMessage(hWnd, Win32.WM_COMPUTECANCELED, IntPtr.Zero, IntPtr.Zero); if (Prime.IsPrime(i) _primeNum+; if(i%(_maxNum/100)=0) Win32.SendMessage(hWnd, Win32.WM_COMPUTEPROGRESS, IntPtr.Zero, (IntPtr)i); Win32.SendMessage(hWnd, Win32.WM_COMPUTEFINISHED,

10、 IntPtr.Zero, (IntPtr)_primeNum); Win32类using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.InteropServices;namespace MultiThreadDemo public class Win32 public const int WM_COMPUTESTART = 0x0400 + 1; public const int WM_COMPUTEFINISHED = 0x0400 + 2;

11、 public const int WM_COMPUTEPROGRESS = 0x0400 + 3; public const int WM_COMPUTECANCELED = 0x0400 + 4; DllImport(User32.dll) public extern static bool PostMessage(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam); DllImport(User32.dll) public extern static int SendMessage(IntPtr hWnd, UInt32 msg,

12、 IntPtr wParam, IntPtr lParam); Thread类using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace MultiThreadDemo public class ThreadParam private IntPtr _mainWndHandle; public IntPtr MainWndHandle get return _mainWndHandle; public ThreadParam(

13、IntPtr handle) _mainWndHandle = handle; 运行结果如图所示:2、设计一个Windows应用程序,用多线程实现一个简单的计算器,用来计算指定范围内数中素数的个数,并用postmessage 发送消息返回素数的个数并显示进度。源程序如下:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace MultiThreadDemo class Prime public static bool Is

14、Prime(int _num) for (int i = 2; i _num/2; i+) if (_num % i = 0) return false; return true; public class Primes private int _primeNum = 0; private int _maxNum; public delegate void ComputeStart(); public delegate void ComputeFinished(int _primeNum); public event ComputeStart OnStart; public event Com

15、puteFinished OnFinished; public Primes(int maxNum) _maxNum = maxNum; public int MaxNum get return _maxNum; public void ComputePrimeNum(ThreadParam param) IntPtr hWnd=param.MainWndHandle; Win32.PostMessage(hWnd, Win32.WM_COMPUTESTART, IntPtr.Zero, IntPtr.Zero); for (int i = 2; i _maxNum; i+) Win32.Po

16、stMessage(hWnd, Win32.WM_COMPUTECANCELED, IntPtr.Zero, IntPtr.Zero); if (Prime.IsPrime(i) _primeNum+; if(i%(_maxNum/100)=0) Win32.PostMessage(hWnd, Win32.WM_COMPUTEPROGRESS, IntPtr.Zero, (IntPtr)i); Win32.PostMessage(hWnd, Win32.WM_COMPUTEFINISHED, IntPtr.Zero, (IntPtr)_primeNum); 只改变prime类中的sendmes

17、sage为postmessage即可,其余代码不变。运行结果如图所示:3、设计一个Windows应用程序,用多线程实现一个简单的计算器,用来计算指定范围内数中素数的个数,并用sendmessage 发送消息返回素数的个数并显示进度,并用aotoresetevent.重置事件,实现主线程对辅助线程的通信。源程序如下:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using Syste

18、m.Text;using System.Windows.Forms;using System.Threading;namespace MultiThreadDemo public partial class MainFrom : Form private Primes p; private AutoResetEvent _eventCancel; public MainFrom() InitializeComponent(); protected override void OnLoad(EventArgs e) base.OnLoad(e); private void btnOK_Click

19、(object sender, EventArgs e) p = new Primes(Convert.ToInt32(this.textBox1.Text.Trim(); p.OnStart += new Primes.ComputeStart(p_OnStart); p.OnFinished += new Primes.ComputeFinished(p_OnFinished); p.OnCanceled += new Primes.ComputeCanceled(p_OnCanceled); p.OnProgress+=new Primes.ComputeProgress(p_OnPro

20、gress); if (btnOK.Text = OK) Thread bkThread = new Thread(new ParameterizedThreadStart(ThreadProc); _eventCancel = new AutoResetEvent(false); bkThread.Start(new ThreadParam(this.Handle, _eventCancel); else _eventCancel.Set(); public void ThreadProc(object objParams) ThreadParam param = objParams as

21、ThreadParam; p.ComputePrimeNum(param); void p_OnCanceled() btnOK.Text = OK; this.lblShow.Text = The computing is canceled!; void p_OnFinished(int _primeNum) this.lblShow.Text = string.Format(The prime number is: 0,_primeNum); btnOK.Text = OK; void p_OnStart() this.lblShow.Text = Compute started.; bt

22、nOK.Text = Cancel; this.pgbCompute.Maximum = p.MaxNum; this.pgbCompute.Minimum = 0; void p_OnProgress(int _prog) this.pgbCompute.Value = _prog; protected override void DefWndProc(ref Message m) switch (m.Msg) case Win32.WM_COMPUTESTART: p_OnStart(); return; case Win32.WM_COMPUTEPROGRESS: p_OnProgres

23、s(int)m.LParam); return; case Win32.WM_COMPUTEFINISHED: p_OnFinished(int)m.LParam); return; case Win32.WM_COMPUTECANCELED: p_OnCanceled(); return; base.DefWndProc(ref m); 类prime代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Wi

24、ndows.Forms;namespace MultiThreadDemo class Prime public static bool IsPrime(int _num) for (int i = 2; i _num/2; i+) if (_num % i = 0) return false; return true; public class Primes private int _primeNum = 0; private int _maxNum; public delegate void ComputeStart(); public delegate void ComputeFinis

25、hed(int _primeNum); public delegate void ComputeCanceled(); public delegate void ComputeProgress(int _prog); public event ComputeStart OnStart; public event ComputeFinished OnFinished; public event ComputeCanceled OnCanceled; public event ComputeProgress OnProgress; public Primes(int maxNum) _maxNum

26、 = maxNum; public int MaxNum get return _maxNum; public void ComputePrimeNum(ThreadParam param) IntPtr hWnd=param.MainWndHandle; AutoResetEvent eventCancel = param.EventCancel; Control mainFrame = Control.FromHandle(hWnd); if(OnStart!=null & mainFrame.IsDisposed=false) mainFrame.BeginInvoke(OnStart)

27、; for (int i = 2; i _maxNum; i+) if (eventCancel.WaitOne(0) if (OnCanceled != null & mainFrame.IsDisposed = false) mainFrame.BeginInvoke(OnCanceled); return; if (Prime.IsPrime(i) _primeNum+; if (i % (_maxNum / 100) = 0 & OnProgress != null & mainFrame.IsDisposed = false) mainFrame.BeginInvoke(OnProg

28、ress, new objecti); if (OnFinished != null) mainFrame.BeginInvoke(OnFinished, new object_primeNum); 类win32,thread,代码与上面相同。4.设计一个Windows应用程序,用多线程实现一个简单的计算器,用来计算指定范围内数中素数的个数,并用bgininvoke 发送消息返回素数的个数并显示进度,实现主线程和辅助线程之间的通信。源程序如下:Win32代码:using System;using System.Collections.Generic;using System.Linq;usin

29、g System.Text;using System.Runtime.InteropServices;namespace MultiThreadDemo public class Win32 public const int WM_COMPUTESTART = 0x0400 + 1; public const int WM_COMPUTEFINISHED = 0x0400 + 2; public const int WM_COMPUTEPROGRESS = 0x0400 + 3; public const int WM_COMPUTECANCELED = 0x0400 + 4; Primes类代码:using System;using System.Collections.Generic;using System.Linq;us

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1