delphi多线程_delphi为什么没人用了_delphi hook

电脑杂谈  发布时间:2017-03-10 14:23:13  来源:网络整理

Delphi 多线程实例

下面笔者将介绍一个简单的实例,解释和说明前面所述的内容。

1) 建立Form,在其中建立两个按钮“开始采集” 和“停止采集”,添加一个PaintBox1。

2) 建立一个新的单元,在其中输入以下代码:

unit CollectThread;

intece

uses

Classes,SysUtils,stdctrls,Graphics;

type

TCollectDataThread = class(TThread)

private

FPreSetTime:Word;

FUsedTime:integer;

FCanvas:TCanvas;

protected

procedure Execute; override;

procedure ShowData;

public

CollectData:array[0..1023]of integer;

constructor Create(PresetTime:Word;Canvas:TCanvas);

end;

implementation

{TCollectDataThread}

constructor TCollectDataThread.Create(PreSetTime:Word;Canvas:TCanvas);

var i:integer;

begin

for i:=0 to 1023 do CollectData[i]:=0;// 给数据赋初值

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 < FPresetTime do

begin

FUsedTime:=FUsedTime+1;

flag:=0; // 数据准备好标志

{由于您在调试程序时没有硬件支持,所以建议您使用下面的这段程序来

模拟硬件的工作,}

for i:=0 to 9000000 do//产生迟延,

flag:=i;

if flag>0 then

begin

CollectData[FUsedTime]:=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转换的数据准备好

begin

CollectData[FUsedTime]:=inportw($342);

end;

flag:=flag and $10;// 恢复数据准备好标志

end; // end while not flag=0

until(flag=0);

Synchronize(ShowData); //同步调用数据显示函数

}

end; //while FUsedtime<FPresetTime


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-36849-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...