清高手指点,在线程的执行过程中怎样调用自定义的函数过程,多谢!!
解决方案 »
- 新人求教,如何在两个表里求最大值和不同值。
- Delphi ADOQUERY批处理 的问题
- 如何实现如下格式数据
- 为什么我的windows Service程序启动的另一程序不显示呢
- 急聘Delphi开发工程师(杭州)
- TFileListBox不能显示长文件名
- 应用程序在后台怎样控制键盘?
- 在ado+access编程中怎样设置access数据库的相对路径?
- 50,请各位大哥帮帮小妹;(给老师、师兄、师弟们问好:))
- 我打算学pascal,谁有它的集成开发软件啊?
- 请教关于FastReport打印的一个很简单的问题.如何将Form1.Edit1的值赋给报表的memo1.
- 拖动Panel改变大小时,当Panel增大到一定程度时就不能再变大了,如何让它可以无限变大?
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
{ Public declarations }
end;var
Form1: TForm1;implementationUses
Unit2;
{$R *.dfm}
{ TForm1 }procedure TForm1.Button1Click(Sender: TObject);
begin
zzz.Create(False);
end;end.unit2的代码unit Unit2;interfaceuses
Classes,SysUtils;type
zzz = class(TThread)
private
FParm:String;
private
Procedure CallProc;
protected
procedure Execute; override;
end;implementationUses
Unit1;{ zzz }Procedure Output(sText:String);//这个函数使用了外部资源,这里是Form1的资源
begin
Form1.Canvas.TextOut(1,1,sText);
end;Function GetStr:String;//没有用到外部资源的函数
begin
Result:=FormatDateTime('yyyy-mm-dd hh:nn:ss.zzz',now);
end;procedure zzz.CallProc;
begin
Output(FParm);
end;procedure zzz.Execute;
begin
FParm:=GetStr;//对于没有用到外部资源的函数,直接调用就可以了 Synchronize(CallProc);//对于用到了外部资源的函数,需要用函数Synchronize来调用
end;end.
uses Unit;
但是,我是在同一单元里声明的线程,
//重载构造函数
constructor Test_thread.create(lb1:TLabel;im1:Timage);
begin
//n_no:=no;
l_b1:=lb1;
//l_b2:=lb2;
i_m1:=im1;
Freeonterminate:=true;
Inherited create(false);
end;
procedure Test_thread.Execute;
begin
synchronize(show);
end;
//检测线程主程序
procedure Test_thread.show;
var
k,y:integer;begin
//获得检测编号
with DataModule5 do
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from result');
ADOQuery1.open;
ADOQuery1.Last;
testid:=DataModule5.ADOQuery1.FieldByName('TestID').AsString;
testid:=inttostr(strtoint(trim(testid))+1);
end;with DataModule5 do
begin
//数据库追加纪录
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from result');
ADOQuery1.open;
ADOQuery1.Append;//追加检测编号
ADOQuery1.FieldByName('TestID').AsString:=testid;//追加车牌号码
ADOQuery1.FieldByName('regino').AsString:='冀D-66666';//检测日期
ADOQuery1.FieldByName('date').AsDateTime:=strtodate('2004-01-28');//废气检测
form1.gas;
//烟度检测
Form1.smoke;..........end;自定义的过程以gas为例:
//废气检测
procedure TForm1.gas;
begin
label1.caption:='废气检测';
showmessage('废气检测');
sleep(2000);
ADOQuery1.FieldByName('Hc').AsFloat:=12.4;
ADOQuery1.FieldByName('Co').AsFloat:=100.4;
form1.Gauge1.Progress:=50;
...............
end;在执行线程的过程中ADOQuery1追加(Append)一条记录,但是在调用gas的时候,却出错了,在gas这个过程中“ADOQuery1.FieldByName('Hc').AsFloat:=12.4”,找不到‘Hc',就是追加记录对gas这个过程无效,怎么解决呢?