GARANTIR DESCONTO

Fórum Thread Clientdataset #292351

19/08/2005

0

galera to com problema com thread e clientdataset,
tenho o seguinte código:

procedure TPacketRecord.Execute;
var
  CriticalSection: TCriticalSection;
begin
  inherited;
  CriticalSection := TCriticalSection.Create;
  try
    CriticalSection.Enter;
    Fcds.DisableControls;
    while not (self.Terminated) do
      begin
        fPacket := Fcds.GetNextPacket;
        Synchronize(UpdateStatusBar);
        if fPacket = 0 then
          Break;
      end;
    Fcds.EnableControls;
    CriticalSection.Leave;
  finally
    CriticalSection.Free;
  end;
end;


uma coisa que naum consigo entender é que executo em um servidor bom
a aplicação naum trava, porém se executo em uma maquina local , a aplicação trava, só que trava em um lugar nada a vê , geralmente quando o usuario vai buscar alguma coisa na banco , ai que tá o problema já escutei falar que quando se trabalha com thread tem que ser usuar uma conexão com o banco pra cada uma , o problema é que no meu caso não dá...

se eu colocar :


        fPacket := Fcds.GetNextPacket;


no syncronize tb ai naum trava a aplicação , porém fica muito lento para o usuario trabalhar...
alguém tem uma ideia pra me ajudar ou uma saída pra mim resolver meu problema...


Alexandre_sbo

Alexandre_sbo

Responder

Posts

19/08/2005

Beppe

Cara, não me faz sentido tua seção crítica. Ela tá protegendo um recurso global, mas a região é local. O correto é 1 seção para todos os threads, e não cada um ter um, entende a diferença? Um o1.Enter só pode ser dado após um o1.Leave. Mas pode haver o2.Enter, o3.Enter, etc...espero ter sido claro.

EnableControls e DisableControls tbm deve ir no Synchronize(que já é uma região crítica), mas não precisam estar em outra região. GetNextPackets precisa ir naquela região compartilhado do parágrafo anterior.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar