PDA

Visualizza la versione completa : [C++] Attendere chiusura di un software


kirakira93
24-04-2010, 18:55
Ciao ragazzi se eseguo questo programma:



#include <windows.h>

int main()
{
Sleep(10000);
return 999;
}


utilizzando la shellexecute(), come faccio a sapere quando Ŕ terminata l'esecuzione del programma e a sapere il valore ritornato dal software (999)?

Grazie ciao :D :D :D

oregon
24-04-2010, 18:57
Intendi da un altro programma C o da un batch o da altro ... ?

xnavigator
24-04-2010, 21:13
Originariamente inviato da oregon
Intendi da un altro programma C o da un batch o da altro ... ?

dovresti utilizzare le fork e wait o waitpid

oregon
24-04-2010, 21:22
Non avevo letto "dalla shellexecute" ...

Comunque, dato che mi pare che parliamo di Windows, ti consiglio di usare le API

CreateProcess
WaitForSingleObject
GetExitCodeProcess

Troverai documentazione su MSDN

kirakira93
26-04-2010, 15:18
Ciao:) grazie dopoprovo entrambi i metodi:) grazie ancora

kirakira93
26-04-2010, 17:10
Eccomi.... tra l'altro c'era un pezzo di codice giÓ fatto xD



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

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

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

ZeroMemory( &sj, sizeof(sj) );
sj.cb = sizeof(sj);
ZeroMemory( &pj, sizeof(pj) );

if(!CreateProcess(TEXT("C:\\a.gdb"), NULL, NULL, NULL, FALSE, 0, NULL, NULL, &sj, &pj))
{
printf( "Hello CreateProcess failed (%d)\n", GetLastError() );
getch();
return 1;
}

if(!CreateProcess(TEXT("C:\\a.exe"), NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
printf( TEXT("CreateProcess2 failed (%d)\n"), GetLastError() );
getch();
return 0;
}

// Wait until child processes exit.
WaitForSingleObject( pi.hProcess, INFINITE );
WaitForSingleObject( pj.hProcess, INFINITE );

// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
CloseHandle( pj.hProcess );
CloseHandle( pj.hThread );
printf(TEXT("Process 1 && 2 has been closed\n"));
//printf ("%i",lpExitCode);
getch();
}


Ecco se potrste spiegarmi questa parte perchŔ non l'ho ben capito :D



STARTUPINFO si;
PROCESS_INFORMATION pi;
STARTUPINFO sj;
PROCESS_INFORMATION pj;

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

ZeroMemory( &sj, sizeof(sj) );
sj.cb = sizeof(sj);
ZeroMemory( &pj, sizeof(pj) );

oregon
26-04-2010, 19:17
Le due strutture servono alla CreateProcess.

La ZeroMemory azzera tutti gli elementi delle strutture.

La sizeof serve a impostare l'elemento cb della struttura che ne indica la lunghezza.

E' molto semplice ... cosa non comprendi?

MItaly
26-04-2010, 19:28
Sulla questione del sizeof, aggiungo:
http://forum.html.it/forum/showthread.php?s=&threadid=1044305

kirakira93
26-04-2010, 20:59
Grazie... comunque.... giÓ che ci sono non penso che un tread sia tanto + difficile...xDxD

domani discuter˛ anche di questo....

kirakira93
27-04-2010, 21:11
Ciao ragazzi....eccomi ancora qui :D
ho fatto dei tentativi (effiferi) con GetExitCodeProcess().... mi potreste dare una mano :)
non ho capito dove va messo sul codice.... :D

Loading