Tenho a seguinte procedure: run winexec("ad.exe -d mysql -y 1q2w3e -s 192.168.0.33 -k 200 -f -e -h"). Ela funciona sem nem um problema. So que o winexec ou o OS-COMMAND me gera um problema. Essa execução conecta via socket a um servidor AD e grava no c:\temp um txt com uma relação de varios usuarios do AD. Ate ai tudo funciona, so que o programa não espera a procedure ser executa completamente. Logo da um erro pois o ad.exe ainda não gravou no c:\temp\users.txt, sou forçado a dar um PAUSE 10 no programa. o codigo fica assim: run winexec("ad.exe -d mysql -y 1q2w3e -s 192.168.0.33 -k 200 -f -e -h"). PAUSE 10. So que esse pause complica, pois maquinas externas demoram ate 15 segundos, e maquina internas são aprox 3 segundos. Como obrigo o progress esperar a execução do winexec?
Faça um "do-while" até esperar que o ficheiro seja gerado. Algo assim Código: do while search("C:\temp\users.txt") <> ?
Usar "Espera Ocupada" apesar de funcionar não é uma boa pratica, pois o processador fica chegando esse while milhões de vezes, quando poderia estar processando outra coisa. No progress tem uma palavra reservado WAIT-FOR, nunca precisei mas aqui tem um exemplo que fica no template de windows dialog. Código: WAIT-FOR GO OF FRAME {&FRAME-NAME}. ou seja o programa fica naquela parte do código esperando, porem continua com a janela ativa e executando outras procedures, para chamar esse suposto dialog eu fiz assim: Código: RUN telas/dialog-teste.w PERSISTENT SET hdg (INPUT THIS-PROCEDURE , INPUT 'teste'). /*Desconsiderar os inputs*/ MESSAGE c-p VIEW-AS ALERT-BOX INFO BUTTONS OK TITLE 'Teste'. DELETE PROCEDURE hdg. neste caso a message só é executada quando o dialog é fechado, espero que ajude, abraço!