我刚开始学线程,以下代码创建和释放线程有问题吗?中途关闭程序,线程能安全释放吗?在线程中让主线程的label控件显示信息,需要线程同步吗?主线程
procedure TForm1.FormShow(Sender: TObject);
begin
  thread1:=jieshou.Create ;
  thread1.FreeOnTerminate := True;
  thread1.resume;
end;jieshou线程
constructor jieshou.create;
begin
  inherited create(TRUE);
end;procedure jieshou.Execute;
var
  j:integer;
begin
  if not Terminated then
  begin
    Hd := FindWindow (nil,'jieshouchengxu');
    for j:=0 to 3000 do
    begin
      if terminate then break; 
      
      数据操作代码...... 
      form1.label1.Caption :='正常';
    end;
    sendMessage(hd,wm_close,0,0);
  end;
end;

解决方案 »

  1.   

    中途关闭线程没问题,这里操作Form1的Label代码修改一下更安全。
          数据操作代码...... 
          form1.label1.Caption :='正常';///////////这里用Synchronize
        procedure jieshou.UpdateCaption;
        begin
          Form1.label1.Caption := '正常';
        end; 
      

  2.   

    中止线程后,就手工将其置为nil.另,如楼上所说,在纯种中访问vcl是很不安全的.
      

  3.   

    操作VCL,必须使用Synchronize方法http://lysoft.7u7.net
      

  4.   

    中止线程后,就手工将其置为nil?在我的程序中,要中止线程只能是关闭程序,线程资源应该自动释放吧?
      

  5.   

    访问vcl安不安全,是看访问线程的数量,还是不管几个都要用Synchronize我觉得如果form1.label1.Caption在程序中只是一个线程访问的话,不用考虑同步和安全问题吧
      

  6.   

    多看帖子学知识。又让我学到了一点Synchronize()方法····
      

  7.   

    多看帖子学知识。又让我学到了一点Synchronize()方法····
    ---------------------------------------------
    虽然看了这么多,但是还不知道怎么用,回去看书去。
    呵呵,在线程中操作数据库应该没有什么问题吧????