R
radarhp
Unregistered / Unconfirmed
GUEST, unregistred user!
我的想法是启动10个线程,每个线程负责一些ID的操作
比方
第一个线程负责1 2 3 4 5 ... 10, 101 102 103 104 105.. 110 , 201....210, 301...310 ....
第二个负责11 12 13 14 15....20, 111 112 113 114 115...120 , 211....220...........
第三个负责21 22 23 24 25....30, 121 122 123 124 125...130 , 221....230...........
.......
[red]现在的问题是listbox中不能正确显示所有经过处理的值,也就是说不能列出1....2000里面所有的整数值 [/red]
因为处理过程中使用了xml,自己注释了它就能正确列出所有的值,不注释就始终显示大多数的(不完整)
[red]所以请教大家,线程中该如何使用XML[/red]
比方
第一个线程负责1 2 3 4 5 ... 10, 101 102 103 104 105.. 110 , 201....210, 301...310 ....
第二个负责11 12 13 14 15....20, 111 112 113 114 115...120 , 211....220...........
第三个负责21 22 23 24 25....30, 121 122 123 124 125...130 , 221....230...........
.......
[red]现在的问题是listbox中不能正确显示所有经过处理的值,也就是说不能列出1....2000里面所有的整数值 [/red]
因为处理过程中使用了xml,自己注释了它就能正确列出所有的值,不注释就始终显示大多数的(不完整)
[red]所以请教大家,线程中该如何使用XML[/red]
代码:
type
TMyThread = class(TThread)
private
{ Private declarations }
FStartID,FEndID,FTargeID: Integer;
FStringList:TStrings;
procedure NewUpdateUI;
procedure UpdateUI;
procedure work;
protected
procedure Execute;
override;
public
constructor Create(CreateSuspended: Boolean);
destructor Destroy;
override;
property StartID:Integer read FStartID write FStartID;
........
//更新UI界面
procedure TMyThread.UpdateUI;
begin
Form2.ListBox1.Items.AddStrings(FStringList);
end;
procedure TMyThread.work;
var
i,j,k: integer;
ID: Integer;
XMLDoc: IXMLDocument;
XMLNode: IXMLNode;
begin
i := FStartID;
j := 0;
k := 0;
try
XMLDoc := NewXMLDocument(WideString('1.0'));
//注释了它和下面一行就每次成功显示所有的ID到LISTBOX
XMLDoc.Encoding := 'GBK';
except
FSList.Add('id ' + IntToStr(FStartID) + ' 创建XML失败' );
Synchronize(NewUpdateUI);
end;
While i < 2000do
begin
FStringList.Add( inttostr(i) + ' id = ' + IntToStr(ID) + ' processing...读取计数j=' + inttostr(j) + ' 写入计数k=' + inttostr(k) );
Inc(j);
if j < 10 then
inc(i)
else
begin
j := 0;
k := 0;
i := i + 90;
end;
Sleep(10);
end;
log.Free;
FreeAndNil(XMLDoc);
end;
procedure TMyThread.Execute;
begin
{ Place thread code here }
FreeOnTerminate:=True;
OnTerminate := Form2.ThreadsDone;
Coinitialize(nil);
Try
work;
finally
CoUninitialize
end;
//最后更新界面,在listbox里面列表经过计算的值
Synchronize(UpdateUI);
end;
//FORM中创建线程代码
Thread0 := TMyThread.Create(True);
Thread0.StartID := 1;
Thread1 := TMyThread.Create(True);
Thread1.StartID := 11;
......
Thread9 := TMyThread.Create(True);
Thread9.StartID := 91;
Thread0.Resume;
Thread1.Resume;
.....
Thread9.Resume;//启动10个线程