PDA

Visualizza versione completa : [Visual C++]-Contare le istanze di un'applicazione


unomichisiada
26-08-2004, 13.38.01
Salve,il titolo dice tutto.Supponiamo di avee una certa applicazione,ogni nuova istanza di tale applicazione che viene avviata dovrebbe riuscire a contare le altre istanze di se stessa attualmente attive e ricavare di conseguenza un numero ordinale da impostare nel suo titolo.Un esempio può chiarire.Supponiamo che inizialmente non ci siano altre istanze attive,il programma dovrebbe contare zero istanze e quindi dire "io mi chiamo 1",la successiva istanza avviata (con l'altra ancora attiva) dovrebbe contare un'applicazione del suo tipo già attiva e quindi dire "io mi chiamo 2",e così via.La cosa non è banale però,infatti all'inizio avevo pensato di usare una variabile statica nella classe applicazione e incrementarla nel costruttore,così però non funziona perchè la variabile statica può contare le istanze di una stessa classe soltanto se istanziate nell'ambito della stessa sessione dell'applicazione.In altre parole se io nel mio programma ho un classe CPippo e la istanzio più volte nell'ambito della stessa sessione dell'applicazione la varibile conterà effettivamente le istanze di CPippo,se però avvio un'altra applicazione uguale le istanze di CPippo create in quella vengono conteggiate a parte in'un'altra variabile statica.Qualche idea per risolvere il mio problema?

Alhazred
02-09-2004, 10.39.42
Sto provando a pensarci, ma il difficile è il fatto che il titolo dell'istanza cambia ogni volta. Se mi viene in mente qualcosa ti faccio sapere.

unomichisiada
02-09-2004, 13.07.24
Non parlarmene,lo so che non è semplice.Ok grazie.

LoryOne
02-09-2004, 14.26.51
Non ho idee migliori ma stavo pensando a ricavare la lista dei processi attivi.
In questo modo, una volta conosciuto il nome del file eseguibile, basterebbe enumerare tutti i processi e controllare quante volte il nome del file è contenuto in lista.
Purtroppo la procedura è ben più complessa di quella da adottare sul 98 se si vuole operare in questo modo su W2K e su WXP.

In rete dovrebbero esserci alcuni esempi pratici.
Prova a vedere se trovi qualcosa tipo "Enumerate Processes in Windows 2000"

LoryOne
02-09-2004, 17.01.41
#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
#include <conio.c>

using namespace std;

main(void){
PROCESSENTRY32 uProcess;
HANDLE hSnapShot;
long r;

hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
uProcess.dwSize = sizeof(uProcess);
r = Process32First(hSnapShot, &uProcess);
while(r){
cout << uProcess.szExeFile << "\n";
r = Process32Next(hSnapShot, &uProcess);
}CloseHandle(hSnapShot);
getch();
}


Questo credo che "funzioni" sul 2000.
Sul 98 è sicuro.

unomichisiada
02-09-2004, 17.29.09
Lo provo Grazie.

unomichisiada
03-09-2004, 01.41.48
Avete letto l'altro mio post?La soluzione di quello,o meglio della sua parte finale mi preme molto di più di questa,se qualche anima buona...Thanks