Thread Clientdataset
galera to com problema com thread e clientdataset,
tenho o seguinte código:
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 :
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...
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
Curtidas 0
Respostas
Beppe
19/08/2005
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.
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.
GOSTEI 0