本帖最后由 lumj 于 2010-10-23 22:50:49 编辑

解决方案 »

  1.   

    我的问题实际是如何阻塞线程,等运行完,再去取s的值
    用waitfor什么的,主线程也死了,多线程也没有意义了,请大家指点
      

  2.   

    输出到VCL组件里的话.使用synchronize进行同步
      

  3.   

    private
      s:string;
    protected
      procedure ShowResult;
    -----------------------------------
    procedure ShowResult;
    begin
      Form1.Edit1.text:=S;
    end;procedure dd.Execute;
    var
      i:Integer;
    begin
      for I:=0 to 40000 do
      begin
       s:=s+'ss';
      end;
      synchronize(ShowResult);
    end;试一下上边的代码,看行不行!
      

  4.   

    使用类变量
    把保存源码的变量放在线程类的
    Private内
    比如TGetcode=class(TThread)private
      GetCode:string;
    Protected
      procedure ExeCute;Override;end;手打的,测试一下吧!
      

  5.   

    private
      s:string;
    protected
      procedure ShowResult;
    -----------------------------------
    procedure ShowResult;
    begin
      Form1.Edit1.text:=S;
    end;procedure dd.Execute;
    var
      i:Integer;
    begin
      for I:=0 to 40000 do
      begin
       s:=s+'ss';
      end;
      synchronize(ShowResult);
    end;
      

  6.   

    LoveMit可以更确一点吗?这个类变量怎么用的? synchronize是不行的, synchronize可以用来更新控件,但是不能用来返回一一个值,因为我不是要更新控件,而是要这个线程完成后,得到的这个返回值!
      

  7.   

    你返回的值是什么?
    不还是这个变量的结果嘛?
    结果就存在s变量里了!
    可以不用Edit显示出来啊!
    再用的时候.直接调用s这个变量就行了!
    你说的我有些听不懂咯~~~
      

  8.   

    能否赐教源码?可能是我没有说清楚,我就是得不到这个s的值!比如我点一个按钮function getHtmlCode:string;
    var 
    s:string;
    add:dd;
    begin
    add:=dd.Create(False);;;而用Result:=add.s;这样的代码显然是得不到值的
    end;
      

  9.   


    嗯.是的.这样得不到!我想,可以将保存结果的变量设置为全局变量,最后在线程中将这个变量赋值,此处要考虑同步问题然后在这个函数的add:=dd.Create(False);下边,使用add.waitfor;等待线程结束结束后,将Result:=s;(s也就是线程中最后得到的值!)这样应该可以.你试下吧,说的可能不太清楚!
      

  10.   

    等待线程结束可以用api函数WaitForSingleObject
      

  11.   

    WaitForSingleObject也会死主线程的,我估计delphi的waitfor方法就是封装了WaitForSingleObject
      

  12.   

    GetExitCodeThread(FThreadHandle, CExit);//FThreadHandle 线程句柄
    //CExit var 出来的result你自己BeginThread,写线程函数的就好定义result值了
      

  13.   

    我也遇到这样的问题,我定义了全局变量如:int count=0,也在创建线程的时候把变量当参数传了进去,也在线程里给变量赋值了count++,运行了我创建的线程后,我也阻塞了主线程的运行,到最后线程运行完了再运行主线程剩下的内容,system.out.print(count);但是得到的值还是0.