Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: dex - 25 Febbraio 2010, 23:31:36

Titolo: [risolto]programma già aperto
Inserito da: dex - 25 Febbraio 2010, 23:31:36
devo fare in modo che in fase di avvio il programma deve controllare che non sia già aperto.

mi succede che alcuni utenti non si rendono conto di aver ridotto il programma ad icona e ne aprono uno nuovo, questo mi crea casini sul database.
Titolo: Re: programma già aperto
Inserito da: fsurfing - 25 Febbraio 2010, 23:40:31
sicuramente esiste una funzione apposita, ma ora non mi ricordo quale :)
in alternativa puoi scrivere una riga in settings o in un file di testo che all'avvio andrai a controllare per sapere se il programma è attivo o meno.
naturalmente devi ricordarti di rendere disattiva la righa alla chiusura
Titolo: Re: programma già aperto
Inserito da: pastrank - 25 Febbraio 2010, 23:41:02
Beh, la cosa piu' semplice e' creare un file all'avvio e da cancellare alla fine, poi, all'avvio di un'altra istanza, ti basta controllare se c'e'.
Titolo: Re: programma già aperto
Inserito da: dex - 25 Febbraio 2010, 23:45:53
avevo già pensato al file e poi scartato.

scrivere un file in fase di avvio non sempre si è sicuri che venga cancellato, se salta la corrente oppure se il pc viene spento senza chiudere il programma si rischia che il file resti ed impedisca l'avvio del programma.

mi servirebbe qualcosa nella ram tipo una variabile o una funzione attiva, in questo modo quando si spegne il pc si cancella tutto.
Titolo: Re: programma già aperto
Inserito da: fsurfing - 25 Febbraio 2010, 23:47:18
scrivere un file in tmp?
Titolo: Re: programma già aperto
Inserito da: fsurfing - 25 Febbraio 2010, 23:47:56
prova a guardare le funzioni desktop  e application
Titolo: Re: programma già aperto
Inserito da: fsurfing - 25 Febbraio 2010, 23:57:28
desktop.find(nome applicazione) ti ritorna un array di puntatori alle applicazioni se l' array contiene un solo puntatore l' applicazione aperta è una se sono di + le applicazioni aperte sono almeno due :)
Titolo: Re: programma già aperto
Inserito da: Ceskho - 26 Febbraio 2010, 00:36:38
scrivere un file in tmp?

E' una delle migliori soluzioni questa poichè tmp viene svuotato dal sistema sempre e comunque....
Titolo: Re: programma già aperto
Inserito da: leo72 - 26 Febbraio 2010, 15:40:14
Codice: [Seleziona]
PRIVATE FUNCTION MultiIstanza() AS Boolean
DIM Risposta AS String
 
  SHELL "ps aux | grep " & Application.Name & ".gambas" & " | grep -wv grep | wc -l" TO Risposta
 
  RETURN IIf(Val(Risposta) > 1, TRUE, FALSE)
         
END

Basta chiamare questa funzione: se è vera il programma è già in esecuzione.
Titolo: Re: programma già aperto
Inserito da: fsurfing - 26 Febbraio 2010, 17:31:29
xchè scomodare il terminale se cè desktop.find ? secondo me dovremmo smettere di usare shell per qualsiasi cosa
Titolo: Re: programma già aperto
Inserito da: Ceskho - 26 Febbraio 2010, 17:37:24
xchè
>:(
Titolo: Re: programma già aperto
Inserito da: Will32 - 26 Febbraio 2010, 17:43:47
Tanto SHELL in più o in meno che cambia ?  :D
Titolo: Re: programma già aperto
Inserito da: Ceskho - 26 Febbraio 2010, 17:45:56
Tanto SHELL in più o in meno che cambia ?  :D

Cambia che richiamare un comando da SHELL significa poi saperne gestire gli output di errore.
Coloro che usano SHELL molto spesso lanciano il comando senza controllarne la riuscita e questo provoca instabilità nel software che si crea....richiamare la shell significa richiamare un altro programma con tutti i problemi annessi e connessi....
Titolo: Re: programma già aperto
Inserito da: fsurfing - 26 Febbraio 2010, 18:34:34
[off topic]
Citazione
xchè
Adirato
sono d'accordo che è meglio scrivere in italiacano senza abbreviazioni ma io  permetto ed uso : xchè e cmq! :P
[/off topic]
Titolo: Re: programma già aperto
Inserito da: luca1202 - 26 Febbraio 2010, 19:05:59
Codice: [Seleziona]
PRIVATE FUNCTION MultiIstanza() AS Boolean
DIM Risposta AS String
 
  SHELL "ps aux | grep " & Application.Name & ".gambas" & " | grep -wv grep | wc -l" TO Risposta
 
  RETURN IIf(Val(Risposta) > 1, TRUE, FALSE)
         
END

Basta chiamare questa funzione: se è vera il programma è già in esecuzione.
perdonate l'intrusione ma la questione interessa anche a me ;D
ho utilizzato la funzione che hai scritto per inserirla in Jungle!! grazie mille ;D
Titolo: Re: programma già aperto
Inserito da: dex - 27 Febbraio 2010, 12:55:58
Codice: [Seleziona]
PRIVATE FUNCTION MultiIstanza() AS Boolean
DIM Risposta AS String
 
  SHELL "ps aux | grep " & Application.Name & ".gambas" & " | grep -wv grep | wc -l" TO Risposta
 
  RETURN IIf(Val(Risposta) > 1, TRUE, FALSE)
         
END

Basta chiamare questa funzione: se è vera il programma è già in esecuzione.

grazie raga, risolto
Titolo: Re: [risolto]programma già aperto
Inserito da: vuott - 31 Luglio 2014, 16:14:15
Segnalo anche questa discussione:

http://www.gambas-it.org/smf/index.php?topic=2056.0