Autore Topic: [risolto]programma già aperto  (Letto 2990 volte)

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
[risolto]programma già aperto
« il: 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.
« Ultima modifica: 27 Febbraio 2010, 12:56:21 da dex »

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: programma già aperto
« Risposta #1 il: 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

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re: programma già aperto
« Risposta #2 il: 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'.

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: programma già aperto
« Risposta #3 il: 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.

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: programma già aperto
« Risposta #4 il: 25 Febbraio 2010, 23:47:18 »
scrivere un file in tmp?

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: programma già aperto
« Risposta #5 il: 25 Febbraio 2010, 23:47:56 »
prova a guardare le funzioni desktop  e application

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: programma già aperto
« Risposta #6 il: 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 :)

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: programma già aperto
« Risposta #7 il: 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....

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: programma già aperto
« Risposta #8 il: 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.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: programma già aperto
« Risposta #9 il: 26 Febbraio 2010, 17:31:29 »
xchè scomodare il terminale se cè desktop.find ? secondo me dovremmo smettere di usare shell per qualsiasi cosa

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: programma già aperto
« Risposta #10 il: 26 Febbraio 2010, 17:37:24 »

Offline Will32

  • Maestro Gambero
  • ****
  • Post: 273
  • Evviva Linux e la Programmazione
    • Mostra profilo
    • TuttoComputer
Re: programma già aperto
« Risposta #11 il: 26 Febbraio 2010, 17:43:47 »
Tanto SHELL in più o in meno che cambia ?  :D

Visita le comunità di Gambas, programma e diventa nostro amico :2birre:

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: programma già aperto
« Risposta #12 il: 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....

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: programma già aperto
« Risposta #13 il: 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]

Offline luca1202

  • Gambero
  • **
  • Post: 95
    • Mostra profilo
    • http://luca1202.wordpress.com
Re: programma già aperto
« Risposta #14 il: 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
il mio progetto -> SITO