Delphi_多线程实例高级.doc

上传人:鲁** 文档编号:560335406 上传时间:2024-02-13 格式:DOC 页数:5 大小:38.50KB
返回 下载 相关 举报
Delphi_多线程实例高级.doc_第1页
第1页 / 共5页
Delphi_多线程实例高级.doc_第2页
第2页 / 共5页
Delphi_多线程实例高级.doc_第3页
第3页 / 共5页
Delphi_多线程实例高级.doc_第4页
第4页 / 共5页
Delphi_多线程实例高级.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《Delphi_多线程实例高级.doc》由会员分享,可在线阅读,更多相关《Delphi_多线程实例高级.doc(5页珍藏版)》请在金锄头文库上搜索。

1、Delphi 多线程实例下面笔者将介绍一个简单的实例,解释和说明前面所述的内容。1) 建立Form,在其中建立两个按钮“开始采集” 和“停止采集”,添加一个PaintBox1。2) 建立一个新的单元,在其中输入以下代码:unit CollectThread;interfaceuses Classes,SysUtils,stdctrls,Graphics;type TCollectDataThread = class(TThread) private FPreSetTime:Word; FUsedTime:integer; FCanvas:TCanvas; protected procedure

2、 Execute; override; procedure ShowData; public CollectData:array0.1023of integer; constructor Create(PresetTime:Word;Canvas:TCanvas);end;implementation TCollectDataThreadconstructor TCollectDataThread.Create(PreSetTime:Word;Canvas:TCanvas);var i:integer;begin for i:=0 to 1023 do CollectDatai:=0; / 给

3、数据赋初值 FCanvas:=Canvas; FPreSetTime:=PreSetTime; / 预置采集次数 FUsedTime:=0; / 已经采集的次数 inherited Create(true); FreeOnTerminate := True; /当线程终止时自动释放该线程end; procedure TCollectDataThread.Execute;var flag:Byte; address:Byte; i:integer;begin while FUsedTime 0 then begin CollectDataFUsedTime:=round(50.0*sin(3.1

4、415/50*FUsedTime); Synchronize(ShowData); /同步调用数据显示函数 end; 实际上从硬件中采集数据最常用的是如下形式,但是这段程序正常工作需要 相应的I/O接口设支持,所以它仅共参考 repeat begin flag:=inportb($341); / 数据是否准备好标志 flag:=flag and $c0; if (flag=0) then / 如果AD转换的数据准备好 begin CollectDataFUsedTime:=inportw($342); end; flag:=flag and $10; / 恢复数据准备好标志 end; / en

5、d while not flag=0 until(flag=0); Synchronize(ShowData); /同步调用数据显示函数 end; /while FUsedtimeFPresetTime DoTerminate; /时间到后线程终止end;/ 在指定的画布上显示采集到的数据;procedure TCollectDataThread.ShowData;begin FCanvas.Pixels2*FUsedTime,80+CollectDataFUsedTime:=clRed; end;end.3) 在Form的单元文件中声明变量CollTestThread:TCollectDat

6、aThread,并在Form的OnCreate事件中加入以下代码:CollTestThread:= TCollectDataThread.Create(500,PaintBox1.Canvas);4)在“开始采集”按钮的OnClick事件中加入以下代码:CollTestThread.Resume;5) 在“暂停采集”按钮的OnClick事件中加入以下代码:CollTestThread.Suspend; 用户可以利用前面所提到的Synchronize函数来窗体,或者使用定时器定期刷新屏幕,这两种方式都可以间隔一定时间显示采集数据情况。6、结束语采用上面所述的方法,笔者实现了对心电谱数据的采集和显

7、示,达到了很好的效果。本方法尤其适用于那些利用计算机I/O插槽来实现数据采集的硬件设备,串口通信中的采集方法也与上述思想相类似。鉴于笔者的水平有限,欢迎读者批评指正文章中的不足之处。Delphi 多线程实例下面笔者将介绍一个简单的实例,解释和说明前面所述的内容。1) 建立Form,在其中建立两个按钮“开始采集” 和“停止采集”,添加一个PaintBox1。2) 建立一个新的单元,在其中输入以下代码:unit CollectThread;interfaceuses Classes,SysUtils,stdctrls,Graphics;type TCollectDataThread = class

8、(TThread) private FPreSetTime:Word; FUsedTime:integer; FCanvas:TCanvas; protected procedure Execute; override; procedure ShowData; public CollectData:array0.1023of integer; constructor Create(PresetTime:Word;Canvas:TCanvas);end;implementation TCollectDataThreadconstructor TCollectDataThread.Create(P

9、reSetTime:Word;Canvas:TCanvas);var i:integer;begin for i:=0 to 1023 do CollectDatai:=0; / 给数据赋初值 FCanvas:=Canvas; FPreSetTime:=PreSetTime; / 预置采集次数 FUsedTime:=0; / 已经采集的次数 inherited Create(true); FreeOnTerminate := True; /当线程终止时自动释放该线程end; procedure TCollectDataThread.Execute;var flag:Byte; address:

10、Byte; i:integer;begin while FUsedTime 0 then begin CollectDataFUsedTime:=round(50.0*sin(3.1415/50*FUsedTime); Synchronize(ShowData); /同步调用数据显示函数 end; 实际上从硬件中采集数据最常用的是如下形式,但是这段程序正常工作需要 相应的I/O接口设支持,所以它仅共参考 repeat begin flag:=inportb($341); / 数据是否准备好标志 flag:=flag and $c0; if (flag=0) then / 如果AD转换的数据准备

11、好 begin CollectDataFUsedTime:=inportw($342); end; flag:=flag and $10; / 恢复数据准备好标志 end; / end while not flag=0 until(flag=0); Synchronize(ShowData); /同步调用数据显示函数 end; /while FUsedtimeFPresetTime DoTerminate; /时间到后线程终止end;/ 在指定的画布上显示采集到的数据;procedure TCollectDataThread.ShowData;begin FCanvas.Pixels2*FUs

12、edTime,80+CollectDataFUsedTime:=clRed; end;end.3) 在Form的单元文件中声明变量CollTestThread:TCollectDataThread,并在Form的OnCreate事件中加入以下代码:CollTestThread:= TCollectDataThread.Create(500,PaintBox1.Canvas);4)在“开始采集”按钮的OnClick事件中加入以下代码:CollTestThread.Resume;5) 在“暂停采集”按钮的OnClick事件中加入以下代码:CollTestThread.Suspend; 用户可以利用前面所提到的Synchronize函数来窗体,或者使用定时器定期刷新屏幕,这两种方式都可以间隔一定时间显示采集数据情况。6、结束语采用上面所述的方法,笔者实现了对心电谱数据的采集和显示,达到了很好的效果。本方法尤其适用于那些利用计算机I/O插槽来实现数据采集的硬件设备,串口通信中的采集方法也与上述思想相类似。鉴于笔

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号