Ir para conteúdo
Fórum Script Brasil
  • 0

Esperar execução programa externo


pedromss

Pergunta

Olá, tenho um código que chama um programa externo, e só depois que este programa termina de executar é que eu gostaria que as demais linhas do meu código fossem lidas. Alguma sugestão de como posso fazer isso? Sei que existe o comando Sleep, mas como a execução do programa externo varia, não gostaria de utilizá-lo.

Segue o código que fiz em anexo. O programa "siman modelo1" demora um tempo para ser executado e gera um arquivo txt que é lido em seguida. Obrigado.

#include <windows.h>
#include <stdio.h>

int main()
{
    float matriz[10];
    int i;
    FILE *fp;
    
    WinExec("C:\\Arquivos de programas\\Rockwell Software\\Arena\\siman modelo1", SW_SHOWNORMAL);   
    
    fp = fopen("Teste.txt","r");
    
    for(i=0; i<10; i++)
       fscanf(fp,"%f", &matriz[i]);
    
    for(i=0; i<10; i++)
       printf("matriz[%d] = %f\n",i,matriz[i]);  
    
    system("pause");
}

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Oi!

Agora que vi sua pergunta, desculpe não responder antes!

Aqui está um código de exemplo para o windows:

#include <windows.h>
#include <stdio.h>
#include <tchar.h>

void _tmain( int argc, TCHAR *argv[] )
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );

    if( argc != 2 )
    {
        printf("Usage: %s [cmdline]\n", argv[0]);
        return;
    }

    // Start the child process. 
    if( !CreateProcess( NULL,   // No module name (use command line)
        argv[1],        // Command line
        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        0,              // No creation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory 
        &si,            // Pointer to STARTUPINFO structure
        &pi )           // Pointer to PROCESS_INFORMATION structure
    ) 
    {
        printf( "CreateProcess failed (%d).\n", GetLastError() );
        return;
    }

    // Wait until child process exits.
    WaitForSingleObject( pi.hProcess, INFINITE );

    // Close process and thread handles. 
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
}
Acho que não é o seu caso mas como outros podem ter a mesma dúvida, deixo aqui a resposta para o Linux:
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>

int main()
{
        int status;
        if(fork()) {
                printf("Esperando o filho...\n");
                wait(&status);
                printf("Filho terminado!\n");
        } else {
                execl("/bin/ls", "/", NULL);
        }

        return 0;
}

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...