mmm...mi sa che non devo spiegare niente.....non ho idee su come farlo....ho rovistato MSDN e Google ma niente da fare!
Aiuto
mmm...mi sa che non devo spiegare niente.....non ho idee su come farlo....ho rovistato MSDN e Google ma niente da fare!
Aiuto
ma se nn riesci a trovare API elenca le windows e controlla con il tuo id del processo.
Per gli Spartani e Sparta usa spartan Il mio github
Spiego meglio:
Io ho due exe:
il primo avvia 30 volte il primo
il secondo crea una finestra ogni volta che si avvia.
Il problema è che il secondo processo deve capire chi è il primo processo che è stato avviato.
Quindi un processo avrà una variabile tipo questa: bSonoStatoAvviatoPerPrimo = TRUE, mentre gli altri 29 avranno questa bSonoStatoAvviatoPerPrimo = FALSE.
Se io uso la FindWindow() non lavora bene perchè visto che i processi devono essere avviati uno dopo l'altro senza Sleep() accade questo:
("=>" significa "di conseguenza")
Processo1): FindWindow() ritorna NULL => bSonoStatoAvviatoPerPrimo = TRUE (Tutto ok )
Processo2): FindWindow() ritorna comunque NULL perchè il primo processo non ha ancora chiamato la CreateWindow()=> bSonoStatoAvviatoPerPrimo = TRUE (MALE! il processo avviato per primo è solo 1! )
Processo3): Lo stesso per Processo2)
/*Vari processi che si comportano come Processo2*/
Finalmente): Processo1 chiama la CreateWindow(), ma ormai è troppo tardi....
Se ci fosse quella API ho ideato un metodo abbastanza veloce è robusto.....però non la trovo ..... bhe adesso che avete capito il problema a fondo, come potrei fare?
Puoi usare anche un'oggetto nominativo, cioe che ha un ID univoco all'interno del sistema, normalmente si usa un mutex, e se esiste significa che il processo è avviato.
Attenzione la visibilita' dell'oggetto in alcuni casi puo' non funzionare adesso nn ricordo bene i casi specifici ma sono molto limitati.
Per gli Spartani e Sparta usa spartan Il mio github
Grazie....comunque sono riuscito a risolvere con un enumwindow() e altri stratagemmi che non sto qui a spiegare percè sono abbastanza comlpessi...comunqe prover la mutex
Ciao
Fidati che conviene il mutex; per il nome "unico", usa un GUID (o il nome del tuo programma seguito da un GUID).
Amaro C++, il gusto pieno dell'undefined behavior.
Concordo ...Originariamente inviato da MItaly
Fidati che conviene il mutex; per il nome "unico", usa un GUID (o il nome del tuo programma seguito da un GUID).
No MP tecnici (non rispondo nemmeno!), usa il forum.
mmm ho provato a leggere la documentazione.....e non ho capito niente!!!
potreste spiegarmi un po' meglio perfavore....
avevo letto per sbaglio la documentazione del .NET....ebbene ora ho capito cos'è un mutex....e (anche se un po' meno cos'è un GUID).....
Domanda1 come potrei usare un Mutex (che si rivelerebbe utile) visto che qui non si lavora con più trhead ma con più processi?
Domanda2 come posso usare il GUID....che li mi sono sforzato di capire un possibile impiego ma non l'ho trovato
ps evviva la faccia
1. È lo stesso, i mutex dotati di nome sono oggetti globali.
2. I GUID sono identificatori più o meno garantiti come universalmente unici (una bassissima probabilità di collisione c'è, ma è risibile); visto che il nome del mutex dovrà essere unico nel sistema, inserendo nel suo nome un GUID ti cauteli da eventuali conflitti con altre applicazioni, che potrebbero generarsi se due applicazioni cercassero di usare un mutex con lo stesso nome, senza sapere che, oltre a loro, ci sta accedendo un'altra applicazione. Per questo dunque ti conviene includere nel nome del mutex un GUID che puoi generare al volo da siti come questo.
Amaro C++, il gusto pieno dell'undefined behavior.