我写了一个类。里面用了tlist等控见
但是为什么我访问里面的一些方法时会出现一些奇怪的问题::
如::
  while Fcritical do  /////////1111 到这里时就不执行了
  begin
    Application.ProcessMessages;
    Sleep(1);
  end;
  Fcritical := true;
这样的代码回出错,
请问各位大虾一般事什么原因啊

解决方案 »

  1.   

    搂住大虾啊,你那个Fcritical是什么啊?—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  2.   

    构析函数:
    constructor TUserGroup.Create(DbConn, TbName,KeyField: string);
    var
       Flag:integer;
    begin
      FCritical := false;
      FTbName := TbName;
      FKeyName:= KeyField;
      FFreeHour := 6;
      FTimeMin := 60;
      FTime := TTimer.Create(nil);
      FTime.Interval := FTimeMin * 60 * 1000;
      FTime.OnTimer := SvrOnTimer;
      FTIme.Enabled := true;
      FUserList := TList.Create;
      Flag:=FUserList.Count;
      FAdoconn := TADOConnection.Create(nil);
      FAdoconn.LoginPrompt := false;
      FAdoconn.ConnectionString := DbConn;
      For Flag:=0 to 60 do
         Begin
         FDBField[Flag].FieldType:=5;
         FDBField[flag].FieldIndex:=30;
         FDBField[flag].DBFieldName:=''
         End;
    end;查找函数::function TUserGroup.GetUser(AMp: string): TFindUser;
    var
      TmpUserResult: TFindUser;
      TmpUser: TUser;
    begin
      try
      //  EnterCritical;
        Result.User.KeyField := '';
        Result.Index := -1;
        TmpUserResult := Find(AMp);
        if TmpUserResult.User.KeyField = '' then
        begin
          TmpUser := GetUserFromDb(AMp);
          if TmpUser.KeyField <> '' then
          begin
            Result.Index := AddUser(TmpUser, TmpUserResult.Index);
            Result.User := TmpUser;
          end;
        end
        else begin
          Result := TmpUserResult;
        end;
      finally
        LeaveCritical;
      end;
    end;
      

  3.   

    可以这么考虑一下,Fcritical 如果为假那段程序就不会执行,如果为真,就是死循环了,^_^,
      

  4.   

    不是这句错:
    while Fcritical do  
    而是它上面的代码有问题,贴出来吧,给你分析一下—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  5.   

    构造函数中,Fcritical:=false; 又没有再改动,到while Fcritical do  当然不执行啦
      

  6.   

    if Fcritical then  /////////Fcritical是布尔型的话,用if不就行了?
      begin
        Application.ProcessMessages;
        Sleep(1);
      end;
      Fcritical := true;