Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Otwieranie programów w trakcie wykonywania innego programu

Ostatnio zmodyfikowano 2015-05-09 18:03
Autor Wiadomość
Roofy5
Temat założony przez niniejszego użytkownika
[C++] Otwieranie programów w trakcie wykonywania innego programu
» 2015-05-08 15:50:31
Witam!

W skrócie mam taki problem.

Napisałem program, który bada czas działania paru algorytmów sortujących. Do sortowania używa tablicy o wymiarze N, gdzie N jest przekazywane do programu jako parametr funkcji main().
Czas działania programu dla dużych tablic ( >1 000 000) elementów dochodzi nawet do kilku godzin (6 algorytmów sortujących). Wyniki są dopisywane do istniejącego pliku.

Wpadłem na taki o to pomysł, żeby stworzyć osobny program, który będzie testował ten mój pierwszy program :D

Wygląda to tak:

C/C++
#include <process.h>
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>

#define ilosc_testow 11

char * testy[ ilosc_testow ] = { "100", "1000", "10000", "25000", "50000", "75000", "100000", "250000", "500000", "750000", "1000000" };

int main()
{
    int i;
    for( i = 0; i < ilosc_testow; i++ )
    {
        _execv( "Sortowanie_Projekt2_TESTY.exe", testy );
    }
   
    system( "pause" );
}

I tu właśnie mam problem - jak mam używać funkcji execv, tak żeby można było przesłać do niej parametr?
Jak widać potrzebuję uruchomić ten program kilkanaście razy. Funkcja execv niestety działa tak że po otwarciu nowego programu, mój program testujący zostaje zakończony.
Wykonuje się tylko 1 test.

Może polecicie mi inną funkcję?

P.S. tablica ma zawierać słowa a nie liczby - mój program sortujący sam przetwarza char *[] na int
P-131884
Piastlis
» 2015-05-09 00:44:03
ShellExecuteA. Parametr jest przekazywany przez typ LPSTR czyli ten sam co w WinMain.Prawdopodobnie będziesz musiał użyć sleep po każdym wywołaniu. Inaczej komp zatka się na amen na dłuższą chwilę.  
P-131924
Roofy5
Temat założony przez niniejszego użytkownika
» 2015-05-09 11:08:26
Poradziłem sobie z problemem w trochę inny sposób ;)

Dla ciekawych wrzucam kod - może komuś się przyda:

C/C++
#define ilosc_testow 11

char * testy[ ilosc_testow ] = { "100", "1000", "10000", "25000", "50000", "75000", "100000", "250000", "500000", "750000", "1000000" };

int main()
{
    int i;
    for( i = 0; i < ilosc_testow; i++ )
    {
        printf( "Test nr %d,  Ilosc elementow: %s", i, testy[ i ] );
        char nazwa[ 100 ] = { "Sortowanie_Projekt2_TESTY.exe " }; //nazwa programu - koniecznie ze spacja
        strcpy( nazwa + 30, testy[ i ] ); //doklejamy parametr z tablicy testy[], w miejsce po spacji
        system( nazwa ); // uruchomienie aplikacji wraz z parametrem
        Sleep( 100 );
        printf( "   DONE\n" );
    }
P-131926
pekfos
» 2015-05-09 18:03:33
C/C++
strcpy( nazwa + 30, testy[ i ] ); //doklejamy parametr z tablicy testy[], w miejsce po spacji
Nie prościej użyć strcat()?
P-131942
« 1 »
  Strona 1 z 1