Eu uso Process. Start para iniciar um arquivo em lote. O arquivo em lote usa o comando START para iniciar vários programas em paralelo e depois sai. Uma vez que o arquivo em lotes é feito Process. HasExited torna-se verdadeiro e Process. ExitCode contém o código de saída correto. Mas quando chamo Process. WaitForExit (), ele trava nunca retorna. O código a seguir demonstra o problema. Ele cria um arquivo em lotes, o inicia e depois imprime: ele deve imprimir: mas nunca faz (mesmo que HasExited seja verdadeiro e já temos um ExitCode). Percebi que isso só ocorre quando o arquivo em lotes contém comandos START e quando a saída padrão e o erro padrão são redirecionados. Por que WaitForExit () nunca retorna Qual é o caminho certo para aguardar que esse processo saia. É seguro apenas pesquisar Process. HasExited ou pode resultar em outros problemas PS. Acabei de notar que chamar WaitForExit (100000) com um tempo limite enorme (que definitivamente não expira) retorna imediatamente quando o processo sai. Wierd. Sem tempo limite, ele trava. Há uma diferença fundamental quando você chama WaitForExit () sem tempo limite, garante que o stdouterr redirecionado tenha retornado EOF. Isso garante que você tenha lido toda a produção produzida pelo processo. Nós não podemos ver o que o quotonOutputquot faz, mas as chances de que ele bloqueie o seu programa, porque ele faz algo desagradável como assumir que seu segmento principal está ocioso quando está realmente preso em WaitForExit (). Ndash Hans Passant 3 de novembro às 12:06 Isso parece ser um artefato (Id say bug) na implementação específica do tratamento assíncrono baseado em eventos do StandardOutput e do StandardError. Notei que, enquanto consegui reproduzir facilmente o seu problema, simplesmente executando o código que você forneceu (excelente exemplo de código, a propósito.)), O processo não aumentou indefinidamente. Em vez disso, ele retornou de WaitForExit () uma vez que ambos os processos filho que tinham sido iniciados já haviam saído. Esta parece ser uma parte intencional da implementação da classe Process. Em particular, no método Process. WaitForExit (), uma vez que acabou de aguardar o processo, ele verifica se um leitor para stdout ou stderr foi criado se assim for, e se o valor de tempo limite para o WaitForExit ( ) Chamada é infinita (ou seja, -1), o código realmente espera o fim do fluxo no (s) leitor (es). Cada leitor respectivo é criado somente quando o método BeginOutputReadLine () ou BeginErrorReadLine () é chamado. Os fluxos stdout e stderr não estão fechados até que os processos filho tenham fechado. Então, esperar no final desses fluxos irá bloquear até que isso aconteça. Que WaitForExit () deve se comportar de forma diferente, dependendo se alguém tenha chamado qualquer um dos métodos que iniciam a leitura baseada em eventos dos fluxos ou não, e especialmente porque a leitura desses fluxos diretamente não causa WaitForExit () se comportar desse jeito, cria Uma inconsistência na API que torna muito mais difícil de entender e usar. Enquanto eu pessoalmente chamo isso de bug, suponho que seja possível que o (s) implementador (es) da classe Process esteja ciente dessa inconsistência e criou isso de propósito. Em qualquer caso, o trabalho seria ler StandardOutput e StandardError diretamente em vez de usar a parte baseada em eventos da API. (Embora, é claro, se o código estivesse esperando nesses fluxos, verificaria o mesmo comportamento de bloqueio até que o filho fique próximo). Por exemplo (C, porque eu não conheço F bem o suficiente para tapar um exemplo de código assim junto rapidamente :)): Espero que o trabalho acima ou algo semelhante abordará o problema básico em que você se encontrou. Meus agradecimentos ao comentarista Niels Vorgaard Christensen por dirigir-me para as linhas problemáticas no método WaitForExit (), para que eu possa melhorar essa resposta. Processamento C-22 Não há basicamente nenhum produto químico estranho, o álcool benzílico parece ser o mais 34exotic34. Eu encontrei nesta receita: Desenvolvedor: Calgon 2 g Álcool benzílico 5 ml Metaborato de sódio Kodalk 85 g Sodiumsulfite 2 g CD 3 5,3 g O agente de desenvolvimento de cor muito comum N ° 3 Brometo de potássio 1,6 g Água a 1000 ml de Dev. O tempo é de 14 min. A 75F ph cerca de 10,6 - 10,7 Em seguida, segue um banho de parada incluindo sulfito de sódio e do que, antes do branqueamento, o banho de endurecimento de formaldeído (4 minutos cada). A principal questão para mim, parece ser clima, valerá a pena todo o trabalho. O filme deve ter cerca de 25 anos de idade e será pelo menos bastante encoberto e os turnos de cores também serão um problema. Através do armazenamento longo haverá uma perda dramática da velocidade do filme, que você pode apenas compensar pouco. Eu observei esses efeitos com outro processo antigo (processo Agfa CNS) também. Talvez dê melhores resultados para tentar um desenvolvimento BW. De qualquer forma, se você ainda estiver interessado, me dê seu endereço de e-mail, vou enviar-lhe um pdf com a fórmula e processar os tempos. Cumprimentos da Alemanha O processo Stefan C-22 exige um pré-intermediário de formaldeído para endurecer a emulsão de filmes antes de ser processado. Além disso, não é radicalmente diferente do c-41. Sem ele a emulsão cairá da base do filme. Se você não tem o mais difícil, você pode desenvolvê-lo em cores a uma temperatura muito menor, mas você ainda terá reticulação na emulsão, embora ainda possivelmente adira à base. A outra opção é desenvolver o filme em BampW. Na verdade, muitas vezes é a melhor abordagem (mas nem sempre), embora nunca tenha visto uma fórmula razoavelmente boa oferecida em qualquer fórum para isso. Agora, eu soento arrogante. Agora ficarei um pouco mais arrogante. Há alguns de nós no negócio do desenvolvimento de filmes antigos. Alguns de nós são realmente muito bons nisso. Alguns aren39t, mas há até um par de dabblers lá fora (pelo menos um de qualquer maneira) que oferecem o serviço e fazer um bom trabalho. Não penso que qualquer um de nós esteja ficando rico nesse negócio. Nossa empresa irá cobrar-lhe muito mais do que o seu dinheiro com 27 dólares34, mas também faremos um trabalho muito melhor, você poderá fazer você mesmo. Mesmo as nossas técnicas de digitalização não são típicas (tipo de filme dependente) Há um bom negócio a ser dito pela experiência de milhares de rolos (desenvolvemos 200 a 400 rolos por mês) e uma preocupação genuína em produzir a melhor qualidade possível. Alguns de nós, oferecendo este serviço, realmente entendem o valor que esses filmes têm para muitas das famílias que enviam trabalho e realmente desejam produzir os melhores resultados possíveis. Desculpe pela breve carta. Eu entendo que é fácil imaginar que os fornecedores deste serviço tenham uma audiência cativa, mas realmente existe uma boa concorrência neste momento (o que é o que eu tenho conhecimento) e como o principal fornecedor de dólares para este serviço, podemos confiar Ao ter nossos clientes entendido que estamos fazendo algo por nossos ganhos. Film Rescue International
No comments:
Post a Comment