mfonz85
28-11-2006, 18:15
Ciao a tutti,
sto scrivendo un programmino che serve a semplificarmi la vita per la conversione e l'ordine di file mp3.
Questo programma prende in input una cartella qualsiasi e crea in un'altra cartella di output la stessa directory tree della cartella di partenza, copiandoci eventualmente sopra i file mp3 ri-codificati usando il ben noto LAME 3.97
Ora, il mio programma funziona molto bene, e riesco a far partire il processo LAME.exe tramite questa funzione, alla quale passo una stringa contenente "lame -h --abr 112 #FILE INPUT# #FILE OUTPUT#" per fare in modo che il LAME stesso crei un mp3 ri-codificato con bitrate medio sui 112kbps:
void startNewLameProcess(char* fullParString)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
if( !CreateProcess(
NULL,
TEXT(fullParString),
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi )
)
{
printf("Creazione processo fallita... (%d).\n", GetLastError() );
return;
}
WaitForSingleObject( pi.hProcess, INFINITE );
DWORD dwExitCode = 0;
GetExitCodeProcess(pi.hProcess, &dwExitCode);
if(dwExitCode == STILL_ACTIVE) {
TerminateProcess(pi.hProcess, 0);
}
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
Ora, la mia domanda è questa: se ho un processore Dual Core, spreco tempo perchè potrei tranquillamente tenere 2 istanze del LAME aperte contemporaneamente, ognuna affibbiata ad 1 singolo processore...
E' possibile effettuare questa operazione anche sul mio programma, anche utilizzando le API di windows???
Oppure posso tenere solo 1 istanza del LAME.exe, aspettare che termini, e poi iniziarne un'altra?
In questo caso, esiste una sorta di ottimizzazione per i sistemi dual/quad core?
Grazie anticipatamente :D
sto scrivendo un programmino che serve a semplificarmi la vita per la conversione e l'ordine di file mp3.
Questo programma prende in input una cartella qualsiasi e crea in un'altra cartella di output la stessa directory tree della cartella di partenza, copiandoci eventualmente sopra i file mp3 ri-codificati usando il ben noto LAME 3.97
Ora, il mio programma funziona molto bene, e riesco a far partire il processo LAME.exe tramite questa funzione, alla quale passo una stringa contenente "lame -h --abr 112 #FILE INPUT# #FILE OUTPUT#" per fare in modo che il LAME stesso crei un mp3 ri-codificato con bitrate medio sui 112kbps:
void startNewLameProcess(char* fullParString)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
if( !CreateProcess(
NULL,
TEXT(fullParString),
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi )
)
{
printf("Creazione processo fallita... (%d).\n", GetLastError() );
return;
}
WaitForSingleObject( pi.hProcess, INFINITE );
DWORD dwExitCode = 0;
GetExitCodeProcess(pi.hProcess, &dwExitCode);
if(dwExitCode == STILL_ACTIVE) {
TerminateProcess(pi.hProcess, 0);
}
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
Ora, la mia domanda è questa: se ho un processore Dual Core, spreco tempo perchè potrei tranquillamente tenere 2 istanze del LAME aperte contemporaneamente, ognuna affibbiata ad 1 singolo processore...
E' possibile effettuare questa operazione anche sul mio programma, anche utilizzando le API di windows???
Oppure posso tenere solo 1 istanza del LAME.exe, aspettare che termini, e poi iniziarne un'altra?
In questo caso, esiste una sorta di ottimizzazione per i sistemi dual/quad core?
Grazie anticipatamente :D