unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBGridEhGrouping, StdCtrls, DB, DBClient, GridsEh, DBGridEh;type
TForm1 = class(TForm)
dbgrdh2: TDBGridEh;
ds2: TClientDataSet;
ds3: TDataSource;
btn1: TButton;
tmfldds2CDSDesigner: TTimeField;
fltfldds2P: TFloatField;
fltfldds2T1: TFloatField;
fltfldds2F1: TFloatField;
fltfldds2T2: TFloatField;
fltfldds2F2: TFloatField;
fltfldds2T3: TFloatField;
fltfldds2F3: TFloatField;
fltfldds2T4: TFloatField;
fltfldds2F4: TFloatField;
fltfldds2T5: TFloatField;
fltfldds2F5: TFloatField;
fltfldds2T6: TFloatField;
fltfldds2F6: TFloatField;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
MyLog:TStringList;
t:THandle;
procedure ShowData;
procedure MyData;
implementation{$R *.dfm}
procedure ShowData;//线程要执行的函数
begin
//开始载入
MyLog:=TStringList.Create();
MyLog.loadfromfile('e:\TEST.TXT');
end;//赋值
procedure MyData;
var
Temp:TStringList;
i:Integer;
begin
Temp:=TStringList.Create();
Temp.Delimiter := '|';
for i:=MyLog.Count-1 downto 0 do
begin
Temp.Clear;
Temp.DelimitedText :=trim(MyLog.strings[i]);
Form1.ds2.Insert;
Form1.ds2.FieldByName('时间').AsDateTime:=StrToDateTime(Temp.Strings[0]);
Form1.ds2.FieldByName('P').AsFloat:=StrToFloat(Temp.Strings[1]);
Form1.ds2.FieldByName('T1').AsFloat:=StrToFloat(Temp.Strings[2]);
Form1.ds2.FieldByName('F1').AsFloat:=StrToFloat(Temp.Strings[3]);
Form1.ds2.FieldByName('T2').AsFloat:=StrToFloat(Temp.Strings[4]);
Form1.ds2.FieldByName('F2').AsFloat:=StrToFloat(Temp.Strings[5]);
Form1.ds2.FieldByName('T3').AsFloat:=StrToFloat(Temp.Strings[6]);
Form1.ds2.FieldByName('F3').AsFloat:=StrToFloat(Temp.Strings[7]);
Form1.ds2.FieldByName('T4').AsFloat:=StrToFloat(Temp.Strings[8]);
Form1.ds2.FieldByName('F4').AsFloat:=StrToFloat(Temp.Strings[9]);
Form1.ds2.FieldByName('T5').AsFloat:=StrToFloat(Temp.Strings[10]);
Form1.ds2.FieldByName('F5').AsFloat:=StrToFloat(Temp.Strings[11]);
Form1.ds2.FieldByName('T6').AsFloat:=StrToFloat(Temp.Strings[12]);
Form1.ds2.FieldByName('F6').AsFloat:=StrToFloat(Temp.Strings[13]);
end;
Temp.Free;
MyLog.Free;
end;
procedure TForm1.btn1Click(Sender: TObject);
var
ID:DWORD;
MyID:DWORD;
begin
t:=CreateThread(nil, 0, @ShowData, nil, 0, ID);
//等待线程结束
if WaitForSingleObject(t, INFINITE) = WAIT_OBJECT_0 then
Begin
CreateThread(nil, 0, @MyData, nil, 0, MyID);
end;
end;end.代码包下载:http://u.115.com/file/bharrkxj#多线程.rar好像的因为TXT没有载入结束就开始赋值引起的错误,但是我线程中加了判断,好像不起作用,T线程没结束就开始下一个线程赋值了,各位大大给看看,谢谢
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBGridEhGrouping, StdCtrls, DB, DBClient, GridsEh, DBGridEh;type
TForm1 = class(TForm)
dbgrdh2: TDBGridEh;
ds2: TClientDataSet;
ds3: TDataSource;
btn1: TButton;
tmfldds2CDSDesigner: TTimeField;
fltfldds2P: TFloatField;
fltfldds2T1: TFloatField;
fltfldds2F1: TFloatField;
fltfldds2T2: TFloatField;
fltfldds2F2: TFloatField;
fltfldds2T3: TFloatField;
fltfldds2F3: TFloatField;
fltfldds2T4: TFloatField;
fltfldds2F4: TFloatField;
fltfldds2T5: TFloatField;
fltfldds2F5: TFloatField;
fltfldds2T6: TFloatField;
fltfldds2F6: TFloatField;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
MyLog:TStringList;
t:THandle;
procedure ShowData;
procedure MyData;
implementation{$R *.dfm}
procedure ShowData;//线程要执行的函数
begin
//开始载入
MyLog:=TStringList.Create();
MyLog.loadfromfile('e:\TEST.TXT');
end;//赋值
procedure MyData;
var
Temp:TStringList;
i:Integer;
begin
Temp:=TStringList.Create();
Temp.Delimiter := '|';
for i:=MyLog.Count-1 downto 0 do
begin
Temp.Clear;
Temp.DelimitedText :=trim(MyLog.strings[i]);
Form1.ds2.Insert;
Form1.ds2.FieldByName('时间').AsDateTime:=StrToDateTime(Temp.Strings[0]);
Form1.ds2.FieldByName('P').AsFloat:=StrToFloat(Temp.Strings[1]);
Form1.ds2.FieldByName('T1').AsFloat:=StrToFloat(Temp.Strings[2]);
Form1.ds2.FieldByName('F1').AsFloat:=StrToFloat(Temp.Strings[3]);
Form1.ds2.FieldByName('T2').AsFloat:=StrToFloat(Temp.Strings[4]);
Form1.ds2.FieldByName('F2').AsFloat:=StrToFloat(Temp.Strings[5]);
Form1.ds2.FieldByName('T3').AsFloat:=StrToFloat(Temp.Strings[6]);
Form1.ds2.FieldByName('F3').AsFloat:=StrToFloat(Temp.Strings[7]);
Form1.ds2.FieldByName('T4').AsFloat:=StrToFloat(Temp.Strings[8]);
Form1.ds2.FieldByName('F4').AsFloat:=StrToFloat(Temp.Strings[9]);
Form1.ds2.FieldByName('T5').AsFloat:=StrToFloat(Temp.Strings[10]);
Form1.ds2.FieldByName('F5').AsFloat:=StrToFloat(Temp.Strings[11]);
Form1.ds2.FieldByName('T6').AsFloat:=StrToFloat(Temp.Strings[12]);
Form1.ds2.FieldByName('F6').AsFloat:=StrToFloat(Temp.Strings[13]);
end;
Temp.Free;
MyLog.Free;
end;
procedure TForm1.btn1Click(Sender: TObject);
var
ID:DWORD;
MyID:DWORD;
begin
t:=CreateThread(nil, 0, @ShowData, nil, 0, ID);
//等待线程结束
if WaitForSingleObject(t, INFINITE) = WAIT_OBJECT_0 then
Begin
CreateThread(nil, 0, @MyData, nil, 0, MyID);
end;
end;end.代码包下载:http://u.115.com/file/bharrkxj#多线程.rar好像的因为TXT没有载入结束就开始赋值引起的错误,但是我线程中加了判断,好像不起作用,T线程没结束就开始下一个线程赋值了,各位大大给看看,谢谢
解决方案 »
- AlphaControls,怎样实现定时改变皮肤
- 很简单的问题,但是不知道怎么解决
- 我要毕业了,应该找一个什么样的工作(迷茫)
- 当用户更改了TDBGrid选定的ITEM时,会触发那是事件?
- 有关进制转换问题
- RichEdit中如何加上点击可直接打开浏览器上网,(类似IE或者OICQ)
- 求教使用tidpop3和TidMessage
- 比较菜 , 给点意见了
- TWinsock是个什么控件?知道的说个,分虽不多,感谢了!
- 如何将字符串转换成对象名?
- delphi基础问题:关于“This form of method call only allowed for class methods”
- delphi里 WinExec('calc',SW_SHOWDEFAULT);啥意思
08:00:35|200|114.1|2.1|114.2|2.2|114.3|2.3|114.4|2.4|114.5|2.5|114.6|2.6
08:01:35|200|115.1|0.1|115.2|0.2|115.3|0.3|115.4|0.4|115.5|0.5|115.6|0.6
08:02:35|200|115.1|0.1|115.2|0.2|115.3|0.3|115.4|0.4|115.5|0.5|115.6|0.6
08:03:35|200|115.1|0.1|115.2|0.2|115.3|0.3|115.4|0.4|115.5|0.5|115.6|0.6