PDA

View Full Version : [C++] Quante istanze in esecuzione ?


twbrother
16-02-2010, 10:11
Sto sviluppando in C++ Builder su windows un applicativo per l'inserimento dati in un db.
Ho la necessità di sapere quante istanze del mio programma sono già in esecuzione, per evitare che un numero troppo elevato di miei processi "ingolfi" il pc in cui sono e/o il server su cui c'è il db.

Qualcuno conosce una qualche primitiva di sistema o API che interrogata mi fornisca il numero di processi in esecuzione (o in memoria), partendo ad esempio dal nome dell'eseguibile che mi interessa ?
Ovviamente mi interessa anche un qualsiasi eventuale meccanismo da voi sperimentato che non sia una dll di sistema.

Grazie in anticipo per ogni suggerimento possibile.

il-pollo
16-02-2010, 11:56
potresti mettere a monte un exe che tiene traccia di quanti processi sono stati lanciati, delegando a questo programmino il lancio delle istanze della tua applicazione e le politiche per notificare l'utente dell'eccessivo numero di istanze esistenti

cionci
16-02-2010, 12:21
Dovrebbe bastare una named mutex: http://www.ubercode.com/write-programs-for-windows-api.html

fero86
17-02-2010, 01:50
é piu adatto un semaforo che un mutex: se vuoi avviare al massimo N processi, ogni processo deve cercare di bloccare un semaforo con conteggio massimo pari ad N e se non ci riesce termina subito. un mutex equivale ad un semaforo binario, cioé con conteggio massimo pari ad 1, quindi é adatto quando devi avviare al massimo una sola istanza del programma.

cionci
17-02-2010, 08:34
Sì, vero, se vuoi un massimo di tot applicazioni aperte un named semaphore, se ne vuoi al massimo una sola una named mutex. L'utilizzo in ogni caso è molto simile al codice che ti ho postato. Guarda CreateSemaphore come API.