据说《delphi 5开发人员指南》一书有多线程搜索的例子,不知哪里有下载!

解决方案 »

  1.   

    function  TmainForm.FastPosNoCase(const  aSourceString, aFindString :String;
                            const  aSourceLen, aFindLen, StartPos :integer):integer;
    var
          SourceLen  :  integer;
    begin
          SourceLen  :=  aSourceLen;
          SourceLen  :=  SourceLen  -  aFindLen;
          if  (StartPos-1)  >    SourceLen  then  begin
              Result  :=  0;
              Exit;
          end;
          SourceLen  :=  SourceLen  -  StartPos;
          SourceLen  :=  SourceLen  +2;
          asm
              push  ESI
              push  EDI
              push  EBX
              mov  EDI,  aSourceString
              add  EDI,  StartPos
              Dec  EDI
              mov  ESI,  aFindString
              mov  ECX,  SourceLen
              Mov    Al,  [ESI]
              //  Make  Al  lowercase.
              and    Al,  $df
              @ScaSB:
              Mov    Ah,  [EDI]
              //  Make  Ah  lowercase.
              and    Ah,  $df
              cmp    Ah,Al
              jne    @NextChar
              @CompareStrings:
              mov    EBX,  aFindLen
              dec    EBX          //add  by  ShengQuanhu
              Jz      @EndOfMatch
              //add  end
      
              @CompareNext:          //  Make  Al  and  Ah  lowercase.
              and    Al,  $df
              and    Ah,  $df
              cmp    Al,  Ah
              Jz      @Matches
              Mov    Al,  [ESI]
              //  Make  Al  lowercase.
              and    Al,  $df
              Jmp    @NextChar
              @Matches:
              Dec    EBX
              Jnz    @CompareNext
      
              //add  by  Shengquanhu
              @EndOfMatch:
              //add  end          mov    EAX,  EDI
              sub    EAX,  aSourceString
              inc    EAX
              mov    Result,  EAX
              jmp    @TheEnd
              @NextChar:
              Inc    EDI
              dec    ECX
              jnz    @ScaSB
              mov    Result,0
              @TheEnd:
              pop    EBX
              pop    EDI
              pop    ESI
          end;
    end;