Posts
...o que você gostaria de fazer exatamente com isso?? ...qual é o propósito?? para eu poder saber qual será a alternativa...
Depende da semântica que deseja...se quiser compartilhar o mesmo espaço de endereços, decenda de TThread e implemente Execute. Senão é CreateProcess.
....é isso ai.....Thread é a palavra certa. .......acho que isso vai servir para o seu proposito. .. ..rs..
22/07/2005
Adriano Santos
Alguém pode me dizer o que é fork ?????
boiei
fork é uma chamada de sistema padronizada no POSIX. Serve pra dividir o processo atual em dois threads, compartilhando o mesmo espaço de endereços. Eu acho um esquema muito podre de IPC, pq vez sim vez não é seguida por um execve, que substitui o thread corrente por um novo programa. É usada principalmente nos Unices, mas tbm na linguagem C.
22/07/2005
Adriano Santos
Beppe, em outras palavras o nosso amigo Rafael Miguel quer dividir um endereço em mais de um e então criar processos para executar uma determinada tarefa?
Bom neste caso, embora eu não sabia usar TThread, apenas conheço o o funcionamento, o melhor para ele é isso, assim ele pode gerar mais de um processo e deixar que o Windows gerencie, to certo?
Beppe, em outras palavras o nosso amigo Rafael Miguel quer dividir um endereço em mais de um e então criar processos para executar uma determinada tarefa?
Bom neste caso, embora eu não sabia usar TThread, apenas conheço o o funcionamento, o melhor para ele é isso, assim ele pode gerar mais de um processo e deixar que o Windows gerencie, to certo?
Isso. Mas ele tem que dar mais detalhes, mas em princípio seria threads.
....soh tem que tomar cuidado com travamento das Threads. ..como Deadlock, por exemplo. ....... ...mas de resto......fica bem legal o lance do processo em paralelo. ....
22/07/2005
Adriano Santos
Mas os Deadlocks e outros erros ocorrem normalmente por loops eternos por exemplo né?
Me fala uma coisa....quando o computador é multi-processado, ou seja, tem mais de um processador, esse esquema pode ser usado para dividir os processos entre os dois chips?
Mas os Deadlocks e outros erros ocorrem normalmente por loops eternos por exemplo né?
Não necessariamente. O exemplo clássico de deadlock é quando duas threads disputam acesso a recursos (por exemplo, uma impressora, um arquivo em disco) que são compartilhados entre as threads.
Por exemplo, imagine duas threads que precisam ter acesso exclusivo ao disco e a impressora simultaneamente; a primeira thread pede (ao sistema operacional) acesso ao disco e depois à impressora enquanto a segunda thread pede os acessos na ordem inversa; é possível em um dado instante que a primeira thread tenha acesso ao disco mas esteja tentando acessar a impressora enquanto a segunda thread tem acesso a impressora e está tentando acessar o disco; note que as duas threads não estão em loop infinito mas sim estão paradas aguardando algo... isso é o deadlock. Do modo como descrevi, fica fácil perceber que se ambas as threads tentassem acessar os recursos na mesma ordem, o problema não ocorreria.
Usar loops infinitos não é problema desde que exista condições do sistema operacional alternar as threads em execução (sleep, I/O, etc).
...quando o computador é multi-processado, ou seja, tem mais de um processador, esse esquema pode ser usado para dividir os processos entre os dois chips?
Acredito que sim, embora provavelmente decidir por alocar uma thread em um ou outro processador seja tarefa do sistema operacional, não do seu programa.
..na verdade ....quando vc cria um processo, ele automaticamente recebe afinidade para os dois processadores, ou seja, o que estiver disponivel, vai processar, mas você pode ir no gerenciador de tarefas e mandar um processo ser atendido por somente um processador.... ....ai entra um detalhe ........cuidado com a dependencia de um processo, por outro ...pois um processo X que precise do processo Y antes de continuar ou antes de iniciar o processo Z. ..pode terminar de ser processado primeiro ......
...e sim .....deadlocks são feitos por loops infirnitos ....DE THREAD, ou seja. ...uma thread A depende de uma Thread B para continuar e derepente a Thread B começa esperar a Thread A terminar de ser processada, por simples questões do proprio gerenciamento de Threads do sistema operacional ..
22/07/2005
Adriano Santos
..na verdade ....quando vc cria um processo, ele automaticamente recebe afinidade para os dois processadores, ou seja, o que estiver disponivel, vai processar, mas você pode ir no gerenciador de tarefas e mandar um processo ser atendido por somente um processador.... ....ai entra um detalhe ........cuidado com a dependencia de um processo, por outro ...pois um processo X que precise do processo Y antes de continuar ou antes de iniciar o processo Z. ..pode terminar de ser processado primeiro ......
Então, mencionei isso porque participei de uma palestra de um colega aqui do ClubeDelphi, não me lembro que, em Sorocaba, num destes encontros do Clube, e lembro que ele mencinou isso, mas confesso que não entendi muito bem....só entendi que é o SO que faz a divisão do processo.
Colegas, se vcs estão falando da classe TThread, não estou entendendo direito. Quando crio vários objetos TThread na aplicação, o gerenciador de tarefas apresenta apenas um processo; daí concluo que a Thread principal do aplicativo é o processo e as Threads secundárias rodam concorrentemente entre sí e com a Thread principal mas sempre dentro de um único processo do Windows. Então minha dúvida é: Como uma Thread secundária conseguirá rodar em outro processador ?
Na verdade o que eu queria é executar determinadas ações se o processo for o filho. No UNIX, o fork cria um processo exatamente igual ao que chamou. Então no UNIX a criação de um processo seria exatamente assim:
result = fork();
if result = 0
{
//processo pai
}
else
{
//processo filho
execl() //Executa um comando
}
Então como podem perceber, posso colocar dois processos para executar apenas um código fonte. Sendo que o desvio ocorre dependendo do processo, se é o pai faz uma coisa, normalmente ele espera o processo filho terminar mas no meu caso queria passar direto, ou seja, deixar um processo filho sem pai. Não sei se no Windows isso é possível.
Na verdade o que eu quero fazer era realizar um backup do meu sistema. Sendo que para fazer a cópia física do programa, teria que fechar o programa para assim realizar a cópía. Depois da cópia, o sistema seria reiniciado. A função que executa esse procedimento está numa DLL.
[]s,
Rafael Miguel