首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

线程 拜求 高手执教 帮忙调试解决方法

2012-02-14 
线程 拜求 高手执教 帮忙调试代码如下:先执行Button2Click然后执行Button4Click为什么线程没执行函数没有

线程 拜求 高手执教 帮忙调试
代码如下:  
  先执行   Button2Click   然后执行     Button4Click   为什么   线程没执行函数   没有推出去     但是   执行   Button5Click     后   IsThreadTerminate   明显时   TRUE   的
拜求   高手执教   帮忙调试  


unit   Unit1;

interface

uses
    Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,
    Dialogs,   StdCtrls;

type
      TThreadProc   =   Procedure(const   IsThreadTerminate   :   boolean)   of   object;

      TMyThread   =   class(TThread)
            private
                  FIsThreadTerminate:   boolean;
                  FThreadProc   :   TThreadProc;
            protected
                  procedure   Execute;   Override;
            public
                  constructor   Create(ThreadProc   :   TThreadProc);OverLoad;
                  destructor   destroy;override;
                  property   IsThreadTerminate:boolean   read   FIsThreadTerminate   write   FIsThreadTerminate;
                  procedure   TerminateThread;
      end;


    TForm1   =   class(TForm)
        Button1:   TButton;
        Edit1:   TEdit;
        Button2:   TButton;
        Button3:   TButton;
        Button4:   TButton;
        Edit2:   TEdit;
        Button5:   TButton;
        procedure   Button2Click(Sender:   TObject);
        procedure   Button1Click(Sender:   TObject);
        procedure   Button3Click(Sender:   TObject);
        procedure   Button4Click(Sender:   TObject);
        procedure   Button5Click(Sender:   TObject);
    private
      myThread:   TMyThread;
      procedure     num(const   IsThreadTerminate   :   boolean);
      //procedure   ONThreaddestroy;
    public
        {   Public   declarations   }
    end;


var
    Form1:   TForm1;

implementation


{$R   *.dfm}

procedure     TForm1.num(const   IsThreadTerminate   :   boolean);
var
      i,j:   integer;
begin
      j:=   0;
      for   i:=   0   to   100000   do
      begin
            if   IsThreadTerminate   then
                  begin
                        Edit2.Text:=   '111111111111 ';


                        break;
                  end
            else
                  Edit2.Text:=   '2222222222222 ';
                 
                  j:=   j   +   1;
                  Edit1.Text:=   inttostr(j);
      end;
end;

procedure   TMyThread.Execute;
begin
      if   Assigned(FThreadProc)   then     FThreadProc(FIsThreadTerminate);
end;

constructor   TMyThread.Create(ThreadProc   :   TThreadProc);
begin
      FThreadProc:=   ThreadProc;

      FreeOnterminate   :=   TRUE;

      FIsThreadTerminate:=   FALSE;

      Inherited   Create(FALSE);

end;

destructor   TMyThread.destroy;
begin

end;

procedure   TMyThread.TerminateThread;
begin

end;

procedure   TForm1.Button2Click(Sender:   TObject);
begin
      myThread:=   TmyThread.Create(num);
end;

procedure   TForm1.Button1Click(Sender:   TObject);
begin
      myThread.Resume;
end;

procedure   TForm1.Button3Click(Sender:   TObject);
begin
      myThread.Suspend;
end;

procedure   TForm1.Button4Click(Sender:   TObject);
begin
      myThread.Suspend;

      //设置IsThreadTerminate   为TRUE     让线程自动结束
      myThread.IsThreadTerminate:=   TRUE;
     


end;

procedure   TForm1.Button5Click(Sender:   TObject);
begin
      //测试     IsThreadTerminate   是否为TRUE
      if   myThread.IsThreadTerminate   then
            showmessage( '111 ');

           
end;


end.

[解决办法]
点击Button2时,线程运行并退出
Inherited Create(FALSE);
[解决办法]
IsThreadTerminate 的值发生矛盾.
[解决办法]
VCL不是线程安全的,要用同步方法。

热点排行