我的程序是用多线程做的,当起一个线程时,我就创建一个TabSheet,并在此TabSheet上创建一个TRichEdit,当线程创建多个时,TRichEdit也就创建多个了,当线程释放时,TRichEdit也随之释放,这个在创建线程比较慢时就不会出什么问题,但如果线程创建太快的话,释放TRichEdit和TabSheet时就会报错,好像说是找不到对象,这是为何?????请各们高手指点!!
解决方案 »
- Delphi 模拟DBNavigation的前4个按钮
- 怎么去掉opendialog文件名的下拉框?
- 教如何在TreeView treenode中嵌入comboBox
- 广州招数名程序员(急招)
- ~~散分,顶者有份!!如何不通过键盘,或者不通过鼠标点击实现listview的选择功能
- quickRpt中如何让页面默认纸张是横向的?
- 做多层应用ERROR LOAD MIDAS.DLL出现是什么原因,有些机器会,有些机器又正常呵!
- 请做过delphi程序和指纹仪连接的朋友帮忙
- 为什么在win2000 server 上装不上delphi5 ?????
- 怎么一次打开一个project中的所有unit?thank you very much!
- 程序运行后怎样对panel 进行移动,拉伸
- stringgrid的问题??急用??
Thread_Id : integer; pMainRedt:TRichEdit); //pNewRichEdit,
begin
inherited Create(CreateSuspended, ASocket);
NewMsgRichEdit := Frm_Main.GetNewMsgRichEdit; //pNewRichEdit;
end;destructor TMyServerThread.destroy;
begin
if Self.NewMsgRichEdit <> nil then
Synchronize(InternalFree);
gThreadHandle[ThreadId_Number] := nil;
inherited;
end;
function TFrm_Main.GetNewMsgRichEdit():TRichEdit;
var
ltbs: TTabSheet;
lredt : TRichEdit;
begin
ltbs:= TTabSheet.Create(Self.PageControl1);
ltbs.Caption:= 'Thread';
lredt:= TRichEdit.Create(ltbs);
lredt.Parent:= ltbs;
ltbs.PageControl:= Self.PageControl1;
lredt.Align:= alClient;
lredt.ScrollBars := ssBoth;
Result:= lredt;
end;
procedure TMyServerThread.InternalFree;
begin FMainRedt.SelStart := Length(FMainRedt.Lines.Text) + 1;
FMainRedt.SelLength := 0;
FMainRedt.SelAttributes.Color := clBlue;
FMainRedt.Lines.Add(#10 + '>>>>>>>>>>>>>>>>>>>Thread Begin<<<<<<<<<<<<<<<<<<<<');
FMainRedt.SelAttributes.Color := clNone; FMainRedt.Lines.Add(Self.NewMsgRichEdit.Lines.Text); FMainRedt.SelStart := Length(FMainRedt.Lines.Text) + 1;
FMainRedt.SelLength := 0;
FMainRedt.SelAttributes.Color := clBlue;
FMainRedt.Lines.Add('>>>>>>>>>>>>>>>>>>>>Thread End<<<<<<<<<<<<<<<<<<<<<' + #10);
FMainRedt.SelAttributes.Color := clNone; Self.NewMsgRichEdit.Lines.Clear;
Self.NewMsgRichEdit.Parent.Free;
end;procedure TMyServerThread.AddLogToREdt(log: String; logcolor : TColor=clNone);
begin
Self.MyMsg := ' ' + log;
Self.MyColor := logColor;
// Frm_Main.PageControl1.ActivePageIndex := 0;
Synchronize(Self.addMsg);
end;
procedure TMyServerThread.addMsg;
begin
Self.MyMsg := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now()) + Self.MyMsg;
if Self.MyColor = clNone then
begin
if Self.NewMsgRichEdit <> Nil then
Self.NewMsgRichEdit.Lines.Add(Self.MyMsg);
end
else
begin
if Self.NewMsgRichEdit <> Nil then
begin
Self.NewMsgRichEdit.SelStart := Length(Self.NewMsgRichEdit.Lines.Text) + 1;
Self.NewMsgRichEdit.SelLength := 0;
Self.NewMsgRichEdit.SelAttributes.Color := MyColor;
Self.NewMsgRichEdit.Lines.Add(Self.MyMsg);
end;
end;
end;
载销毁线成