Fórum TIDTCPServer e Core 2 duo #366351
21/11/2008
0
Seguinte: Tenho uma aplicação usando os componentes TIDTCPServer e TIDTCPClient. Desenvolvo em D7 numa máquina AMD Athlon 64 e Windows XP Pro.
Na minha máquina (o AMD), rodo a aplicação servidora e aproximadamente 20 estações se conectam nela e tudo funciona perfeitamente, o dia todo, sem travamentos.
Quando instalo a aplicação servidora numa máquina Intel Core 2 duo, as estações até se conectam e os métodos da aplicação servidora começam a ser executados normalmente. O problema é que ocorre aleatoriamente, ou seja, as vezes é em um método, as vezes em outro, o travamento da aplicação e ninguém mais se conecta. Só finalizando para fechá-la.
Suspeito que o problema seja no processador com 2 núcleos. No gerenciador de tarefas do windows, já coloquei a aplicação para rodar em apenas 1 núcleo (na opção de afinidade), mas mesmo assim continua travando.
Alguém ai já passou por isso e/ou conhece alguma solução para esse problema?
Teria alguma forma de forçar, através de código, o programa rodar em apenas 1 núcleo? Se claro, o problema for com 2 núcleos.
Agradeço desde já!
Marcelo.
Tchelllo
Curtir tópico
+ 0Posts
22/11/2008
Tchelllo
Alterando no msconfig, na aba BOOT.INI, em Opções avançadas, colquei no parametro /NUMPROC o valor 1 e reiniciei.
Após, executei a aplicação e tudo funcionou normalmente, sem travar.
Concluo então que o problema é devido ao processador com 2 núcleos mesmo.
Ao invés de deixar meu servidor rodando apenas um núcleo, existe uma maneira, através de código, de forçar a aplicação rodar em apenas 1 núcleo? Assim como o firebird, onde, através do parâmetro CpuAffinity do firebird.conf, podemos configurar quantos cpu´s ele usará.
Ah, esqueci de mencionar na msg. anterior, mas a aplicação acessa o firebird na maioria dos métodos. Será algum problema com isso?
Marcelo.
Gostei + 0
24/11/2008
Cabreu.jr
Abra o firebird.conf e tire o comentário da linha CpuAffinityMask = 1
Gostei + 0
24/11/2008
Tchelllo
Tentei fazer isso mas não resolveu. Tb tentei instalar o firebird na versão classic, mas tb não adiantou.
Tentei tb a função SetProcessAffinityMask direto no código, mas tb não adiantou, pois continuou travando. Estava colocando assim:
SetProcessAffinityMask(GetCurrentProcessId, $00000001);
O GetCurrentProcessId pega o Id do processo da aplicação (o arquivo .exe).
Já o $00000001, fará uso somente de um núcleo.
fonte: [url]http://www.delphi3000.com/articles/article_3565.asp?SK=multi¬20thread[/url]
Tentei colocar essa função no Create do form principal da aplicação e até logo após o application.initialize, e nada.
Esse problema tá complicado de resolver! :(
Gostei + 0
24/11/2008
Cabreu.jr
Gostei + 0
24/11/2008
Tchelllo
Estou usando o TIDTCPServer da paleta Indy, que cria uma thread para cada conexão. Ressalvo que antes de cada execução de determinado método, travo o server com LockList.
Não uso nenhum componente tipo o Eurekalog.
Gostei + 0
24/11/2008
Tchelllo
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)