行
行到水穷处
Unregistered / Unconfirmed
GUEST, unregistred user!
是这样的,我想批量产生线程,然后再批量执行。
用一个循环(For I :=0 to N 的那种)Create线程,其中线程的Create函数传入的变量和循环的次数有关系(I 是一个端口数),问题是假如我创建一个线程,并执行Execute,就会正常,而,当创建后挂起,再Resume的时候,所有的线程内的端口数据(传入的 变量I) 都成了最后的那个了(就是端口数本来是从0到N的,但是现在却都是N了)。
public
constructor Create(InputStringList:TStringList);
..........
constructor TMyThread.Create(InputStringList:TStringList);
begin
inherited Create(True);
FString:=InputStringList;
使用的时候:
var
I : integer
TempThread: TMyThread;
ThreadPoint:string;
TempThreadName:string;
begin
//启动线程 完成ThreadId(Point)的产生。
for I := 0 to 9do
begin
Msg[0]:=IntToStr(I);
TempThread := TMyThread.Create(Msg);//Msg是一个传入的变量,
ThreadPoint := IntToStr(Integer(TempThread));
TempThreadName:=ThreadPoint;
MyThreadList.AddObject( ThreadPoint, TempThread);
//MyThreadList 是一个全局变量,控制线程的。
end;
到这里完成线程创建,线程创建后是挂起的// inherited Create(True);
用
function TThreadManager.StartScan: boolean;
var
I: Integer;
begin
Result := False;
if MyThreadList.Count = 0 then
exit;
for I := 0 to MyThreadList.Count-1do
begin
Result := True;
TMyThread(StrToInt(MyThreadList)).Resume;//在这里统一运行线程
end;
end;
结果,发现,在线程的产程的数据出现了问题,10个线程里面的有关Msg[0] 的数据全部是 9
用一个循环(For I :=0 to N 的那种)Create线程,其中线程的Create函数传入的变量和循环的次数有关系(I 是一个端口数),问题是假如我创建一个线程,并执行Execute,就会正常,而,当创建后挂起,再Resume的时候,所有的线程内的端口数据(传入的 变量I) 都成了最后的那个了(就是端口数本来是从0到N的,但是现在却都是N了)。
public
constructor Create(InputStringList:TStringList);
..........
constructor TMyThread.Create(InputStringList:TStringList);
begin
inherited Create(True);
FString:=InputStringList;
使用的时候:
var
I : integer
TempThread: TMyThread;
ThreadPoint:string;
TempThreadName:string;
begin
//启动线程 完成ThreadId(Point)的产生。
for I := 0 to 9do
begin
Msg[0]:=IntToStr(I);
TempThread := TMyThread.Create(Msg);//Msg是一个传入的变量,
ThreadPoint := IntToStr(Integer(TempThread));
TempThreadName:=ThreadPoint;
MyThreadList.AddObject( ThreadPoint, TempThread);
//MyThreadList 是一个全局变量,控制线程的。
end;
到这里完成线程创建,线程创建后是挂起的// inherited Create(True);
用
function TThreadManager.StartScan: boolean;
var
I: Integer;
begin
Result := False;
if MyThreadList.Count = 0 then
exit;
for I := 0 to MyThreadList.Count-1do
begin
Result := True;
TMyThread(StrToInt(MyThreadList)).Resume;//在这里统一运行线程
end;
end;
结果,发现,在线程的产程的数据出现了问题,10个线程里面的有关Msg[0] 的数据全部是 9