Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Routine "muori": un'istanza che distrugge sé stessa
mercoledì 01 settembre 2004 - 17.39
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
zami
Profilo
| Junior Member
56
messaggi | Data Invio:
mer 1 set 2004 - 17:39
Salve!
Stiamo realizzando a scopi didattici un'applicazione console tipo MUD.
Il problema si pone quando uno dei MOB deve essere eliminato.
Per capirci: istanziamo due tigri, il nome degli oggetti è tigre1 e tigre2.
Queste combattono, e una dev'essere eliminata ("muore"):
Qualcuno ha idea di quale possa essere il codice per la routine "muori"?
Abbiamo tentato con ME = NOTHING ma non funziona.
Visto che dall'esterno tigre1 = NOTHING cancellava l'istanza dell'oggetto, abbiamo cercato di creare un oggetto esterno ad hoc al quale passare ME come parametro ma neppure questo funziona.
Spero di essermi spiegata, non mi capisco nemmeno più da sola a quest'ora :P
Grazie comunque e ciao
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
mer 1 set 2004 - 22:58
Ciao Miki,
questa applicazione Mud come è stata implementata ? Client / Server o gira tutto su un client ? Spiega un po'.
ciao
david
zami
Profilo
| Junior Member
56
messaggi | Data Invio:
gio 2 set 2004 - 09:48
Ciao David,
Per il momento è solo un processo che gira tutto su una macchina: se vediamo che riusciamo a fare qualcosa che valga la pena di portare avanti, sicuramente diventerà un'applicazione server alla quale si connetteranno dei client.
In effetti visto che siamo novizie assolute di questo tipo di programmazione stiamo procedendo un po' a braccio.....:)
Grazie
Michela
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
ven 3 set 2004 - 00:04
Sarebbe l'ideale se tu postassi un pezzettino di codice per capire come istanzi le classi e come le chiudi, voglio capire il processo che deve compiere la povera tigre prima di morire :)
La programmazione per classi non è facilissima ed è difficile andare a braccio se poi si intersecano un'architettura client/server e un'applicazione Multithreading :-O diventa molto difficile.
ciao
david
zami
Profilo
| Junior Member
56
messaggi | Data Invio:
ven 3 set 2004 - 17:07
Con alcuni tagli, il codice che "gira" è questo che segue.
In fondo c'è una classe TESTER che contiene il metodo main: ne viene subito
istanziato un oggetto t e di questo si chiama il metodo RUN().
In run() ci sono per ora solo le dichiarazioni dei tre animali e l'attacco per adesso viene "forzato" a mano.
Il punto è che in fondo il drago attacca la tigre e la uccide: l'istanza viene settatta a
nothing dalla classe (ehm) Angelo_Della_Morte ma all'uscita, quando il controllo
ritorna nel Run, il drago attacca di nuovo QUELL'ISTANZA di tigre, e questa risulta
ancora esistente e funzionante: se invece si setta a NOTHING quell'istanza da
dentro il RUN, manualmente, scrivendo tigre1 = nothing, e dopo si tenta l'attacco,
viene generato errore (l'istanza non esiste più).
Grazie ancora!!
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
dom 19 set 2004 - 21:56
Per evitare gli errori avete più modi o usare il Try..Catch oppure verificare ogni volta se una particolare istanza è istanziata o meno.
Evitate magari per le prime volte di mettere a Nothing l'instanza di classe se no viene terminta.
Verificate con il debug passo passo l'evoluzione del codice.
ciao
david
Caleidoscopio
Profilo
| Newbie
49
messaggi | Data Invio:
ven 8 ott 2004 - 10:49
Se la tua Tigre1 è un'istanza di una classe....
dim x as new tigre1,
il metodo per "Killare" un oggetto in .net è x.dispose.
Spero ti aiuti....bye
zami
Profilo
| Junior Member
56
messaggi | Data Invio:
ven 8 ott 2004 - 11:33
dunque è un po' che non ci rimetto le mani, ma ricordo che il metodo dispose non funzionava.... se non vado errata il dispose serve a chiamare forzatamente la garbage collection su qualcosa.... questa sera mi riguardo il codice e ti dico che errore mi dava. Intanto ti ringrazio!
Caleidoscopio
Profilo
| Newbie
49
messaggi | Data Invio:
ven 8 ott 2004 - 12:25
Hai ragione, il metodo dispose chiama il garbage collector... però i tipi riferimento, come le classi vengono allocati nell heap e non nello stack, quindi il settare a nothing il valore di x (nell'esempio di prima) nn elimina l'oggetto, perchè il riferimento all'istanza nell'heap nn viene cancellato fino al "collect" automatico del garbage collector, che avviene quando il dominio di memoria dell'appl. nn è più sufficiente x farla girare....almeno se nn ricordo male....è un pò che nn ripasso....
zami
Profilo
| Junior Member
56
messaggi | Data Invio:
ven 8 ott 2004 - 18:04
Confermo, esattamente..... ma quello che io andavo cercando non era l'effettiva distruzione dell'oggetto (quella risultante dalla garbage collection), ma il renderlo indisponibile all'interazione (passami la terminologia un po' frettolosa), risultato che ottenevo appunto settandolo esternamente a nothing.
Il problema nasceva quando doveva decidere lui stesso di essere settato a nothing..... cioè quando doveva passare sé stesso come argomento a un'istanza che lo settasse a nothing (mi sono capita?)
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !