【发布时间】:2015-05-24 18:04:37
【问题描述】:
我有一个框架,在它里面我有一个线程,这个前面和运行时的创建,每次点击给按钮它都会创建一个新的框架,并且在表单中可能有无数个。问题是......我创建了第一个,创建第二个时线程正常启动,第一个线程开始,第二个开始,如果我再次点击,第一个和第二个静止,第三个开始,如果我关闭第三,第二回工作,因为这种情况? 谢谢
constructor TMy_Thread.Create(fraConnect : TfraConnect);
begin
inherited Create(True);
Priority := tpTimeCritical;
FreeOnTerminate := true;
fraConnectT := fraConnect;
end;
procedure TMy_Thread.Execute;
begin
Synchronize(Teste);
end;
procedure TMy_Thread.TEste;
var
iSize : Int64;
iCnt : Integer;
Msg : TMsg ;
begin
inherited;
with fraConnectT do begin
While not Terminated do begin
Log(fraConnectT.Name,'');
Application.ProcessMessages;
end;
end;
end;
////////////////
procedure TfraConnect.Click(Sender: TObject);
var
Sc : TMy_Thread;
begin
Sc := TMy_Thread.Create(Self);
try
iTela := 0;
Sc.Execute;
finally
Sc.Terminate;
end;
end;
【问题讨论】:
-
很难理解您所描述的问题,尤其是因为我们看不到任何代码。你能提供一个样本来证明你的问题吗?另一方面,根据您的解释,听起来您需要一个线程池,但在不知道上下文的情况下不能太确定。
-
请阅读您自己的问题并问问自己,您是否以允许人们回答的方式解释了您的问题。
-
请显示一些实际代码。听起来您的框架/线程试图访问在创建新框架/线程时被锁定并在释放时解锁的东西,从而阻止访问早期的框架/线程实例。如果没有看到你真正在做什么,很难确定。
-
这里有很多错误。泄漏线程。从主线程调用 Execute。同步非终止函数。您需要重新开始,并确保您有更好的理解。我很难明白为什么你需要一个线程。在您有更好的理解之前,您需要避免超出您当前专业知识的线程。
-
说真的,tpTimeCritical 优先级?这意味着你对自己在做什么一无所知。这几乎没有任何借口。您也不能在线程过程中调用 ProcessMessages(尽管它现在在主线程中执行 - 它不应该在那里)。
标签: multithreading delphi