这是什么原因?我不用线程,单独调用过程,却没有这个错误

解决方案 »

  1.   

    不知道你的线程里有没有对VCL的操作,很多VCL是不支持多线程的
      

  2.   

    如果对VCL控件进行操作就要能用到Synchronize,因为Delphi的大多数VCL不是线程安全的。
    例子如下:
    procedure TMyThread.PushTheButton;begin
      Button1.Click();
    end;procedure TMyThread.Execute;
    begin
    ...
      Synchronize(PushTheButton);
      ...
    end;
      

  3.   

    我的线程:
    type
     TSearChThread=class(TThread)
     private
      FCount:string;
     protected
       procedure Execute;override;
     public
      constructor Create(Const Senstr:string);
     end;procedure TSearChThread.ExeCute;
    begin
     FreeOnTerminate:=true;
     Synchronize(SearchFire(MainForm.IniXMLStr,FCount));//报错:There is no overloaded 
                                                       vision of 'Synchronize' that  can be called with these argumentsend;
    constructor TSearChThread.Create(const SenStr:string);
    begin
     FCount:=SenStr;
     inherited Create(False);
    end;
    其中
    procedure SearchFire(XmlStr:String;SensorStr:string);
    var
     Leng:integer;
     DocDoM:IXMLDOMDocument;
     SearchRec:TSearchRec;
    begin
      if FindFirst(XMLStr,faAnyFile,SearchRec)=0 then
      begin
        CoInitializeEx (NIL,0);
        DocDoM:=CoDomDocument.Create;
        DocDom.load(MainForm.IniXMLStr);
       ....
      end;
    end;
      

  4.   

    Synchronize(SearchFire(MainForm.IniXMLStr,FCount));
    Synchronize里是不允许操作过程和函数的。
      

  5.   

    谢谢各位!那那个报错信息"access voiation..."是什么意思?
      

  6.   

    使用synchronize不可以调用带参数的过程,如果要传参数,可以将参数定义为线程的数据成员(最好是私有的),然后在调用过程之前将值赋之就可以了。
      

  7.   

    synchronize后面只能带没有参数的过程,
    可以照楼上的用事先定义线程数据的方法
    处理比较好!