|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
[Java]
Come posso creare(non mi pare ne sia già offerto uno) in Java un mutex di sistema (tipo quello presente in C#) in modo da evitare di lanciare 2 istanze della stessa applicazione?
|
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
Comunque qualcosa di simile è implementabile banalmente creando un file temporaneo e lockandolo. Quando vedi che esiste ed è lockato allora sta girando un'istanza della tua applicazione, se non esiste allora puoi andare tranquillo, se invece esiste e non è lockato allora la tua applicazione è crashata prima di cancella re il file temporaneo e puoi acquisire tranquillamente il lock senza ricrearlo. Ovviamente ricordati di cancellarlo quando esci ![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
|
domanda ciclica
ricordo che tempo fa qualcuno suggerì l'ottima idea di usare una porta TCP al posto del file ![]()
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer °SetiEmperor°| Ninja Technologies { qualunque cosa sia, è veloce e fa male (cit.) } |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Quote:
Avevo pensato al file ma solo nel senso di controllarne l' esistenza o meno, ma non avevo effettivamente pensato a fatto che un problema all' applicazione potrebbe impedire la corretta cancellazione prima della chiusura. Esattamente cosa andrebbe usato per lockare il file in java? |
|
![]() |
![]() |
![]() |
#5 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
domanda ambigua più che altro... deve lanciare una sola istanza in che contesto? un'istanza per sessione? un'istanza per desktop? un'istanza per utente? un'istanza globale su tutto il sistema?
inoltre non è detto che in Java esista una soluzione per tutti i suddetti contesti, potrebbe ritrovarsi a dover usare JNI (aggiungo che una mini-libreria per Windows basata su JNI per gestire istanze singole nei vari contesti sarebbe estremamente utile). |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Quote:
Non mi sono chiari i primi 2 contesti ch indicavi(sessione e desktop). Puoi farmi un esempio concreto? |
|
![]() |
![]() |
![]() |
#7 | ||
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
il concetto di desktop magari invece è un pochino più "inaccessibile"; comunque, in Windows a ciascuna sessione viene associata una Window Station, che è un oggetto del kernel (securable) che può contenere diversi Desktops, altri oggetti del kernel (sempre securable). ciascun utente che avvia una sessione dunque può avere uno o più desktops, che sarebbero "spazi" virtuali in cui possono essere create e visualizzate finestre dalle varie applicazioni. nella Window Station di ciascuna sessione interattiva inoltre c'è sempre almeno un desktop di nome "Default", ed è quello dove normalmente all'avvio viene creato il processo explorer.exe (la shell grafica di Windows) il quale visualizza la taskbar e le icone. tuttavia al desktop "Default" sarebbe possibile aggiungere anche altri desktops nei quali è possibile creare altrettanti processi explorer.exe, e così l'utente si ritroverebbe in un ambiente multidesktop simile a Linux. ecco un programma che lo fa (abbiate pazienza, sta ancora ad una delle prime release e quindi fa un po' schifo ![]() percui la domanda è: del tuo programma deve essere possibile avviare più istanze nella stessa sessione ma da parte di utenti diversi? e da parte dello stesso utente in sessioni diverse? o semplicemente in sessioni diverse? o semplicemente da utenti diversi? inoltre, in una stessa sessione deve essere possibile avviare istanze diverse in desktop diversi? l'espressione "avviare una sola istanza di un programma" è molto naive. Quote:
|
||
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Quote:
|
|
![]() |
![]() |
![]() |
#9 | ||
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
http://msdn.microsoft.com/en-us/libr...68(VS.85).aspx Quote:
|
||
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Quote:
Di contro però essendo terminata alla chiudura della sessione, mi fa pensare che potrebbe essere sufficiente gestire questo caso come quello per singolo utente, infatt mi sembra di aver capire che lanciare un processo sotto lo spazio di un altro user sia possibile solo attraverso le api di windows ma non con operazioni manuali da shell. |
|
![]() |
![]() |
![]() |
#11 | ||||
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Quote:
Quote:
Quote:
|
||||
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:27.