Newsgroup: it.comp.lang.visual-basic
Titolo: come farsi avvisare se il pc va in crash

ciao, ci ho preso gusto e così eccomi con un altro quesito. ;-D
Dato un PC con su un applicativo che spedisce fax a orari prefissati
(ricordate?), esiste la concreta possibilità che non funzioni perchè:
a) il programma va in crash per qualche motivo;
b) è il PC che va in crash;
c) si è verificato un black-out (mannaggia ai condizionatori)
Ora, escludendo di mettere un omino che sorveglia l'ambaradan
(altrimenti tanto valeva mandare i fax a mano), voi come fareste?
Io pensavo a un aggeggio con un timer impostato, mettiamo, a due
minuti, trascorsi i quali fa scattare un campanello, una sirena, fa
suonare le trombe del giudizio.
Senonchè il PC, meglio ancora l'applicativo che gira, così se va in
crash lui  e non il pc ci se ne accorge comunque, l'applicativo,
dicevo, mediante la porta parallela dovrebbe spedire un impulso ogni
minuto che azzera il timer e impedisce il casino di cui prima.
In tal modo l'allarme avrebbe modo di sfogarsi solo se il PC non
dovesse fermarlo in tempo, appunto a causa del crash.
Sapete se esiste un aggeggio del genere? E dove reperirlo? O avete in
mente altre soluzioni?
ciao e grazie
Geppino

 dovesse fermarlo in tempo, appunto a causa del crash.
Prima di tutto i PC vanno messi sotto UPS :-P
Poi potresti mettere un programmillo su un altro PC nella stessa rete
a fare da monitor del primo.
Il tuo prog potrebbe, ogni tot secondi o minuti inviare, per esempio, un
pacchetto UDP[1] al PC che fa da controllo.
Se il pacchetto non arriva una volta, può capitare, ma se non ne arrivano
due di fila, allora c'è qualcosa non va, e hai la scelta: mandi una mail,
componi un numero di telefono col modem, mandi un esseemmeesse,
fai suonare le casse, lampeggiare il monitor, agitare una bandierina,
chiami l'esercito, l'FBI, i Man in Black, o qualcosa del genere.
[1] meglio UDP che TCP perché è connectionless; così, se si pianta
il PC che fa da monitor non succede niente, altrimenti il programma
ti si complica. Certo, con una connessione TCP potresti anche fare
un controllo "bidirezionale": se il PC A non riesce a connettersi al B
per dirgli "sono vivo e funzionante", potrebbe a sua volta avvisarti
che il B è giù... :-)
Questa tecnica si chiama "watchdog", e la usano alcuni degli ultimi
worm/virus, mannaggialloro, nonché alcuni antivirus, con risultati che
potrebbero essere comici, se s'incontrano due sistemi simili :-)
Bye, G.

 che il B è giù... :-)
dietro lo specchio: b e' vivo e vegeto, e a è andato a meringhe :P

Grazie lo stesso, ma il PC č stand-alone e io non oso proporre al capo
di metter su una mini rete e impegnare due PC per questa applicazione.
Continuerň la mia ricerca.
Ciao
Geppino

 di metter su una mini rete e impegnare due PC per questa applicazione.
Beh, alla peggio puoi fare la stessa cosa con un solo PC: basta far
lavorare i programmi sull'interfaccia locale, l'IP 127.0.0.1, e i due
programmi colloquiano perfettamente.
Certo, se ti si pianta il programma ti avvisa, se si pianta il sistema
operativo o proprio il PC, ovviamente no.
Bye, G.

 operativo o proprio il PC, ovviamente no.
Mi pare di sentire una richiesta che mi fu fatta tempo fa: "ma il programma
non può salvare i dati nel momento in cui manca la corrente al PC?".
Ciao

 (ricordate?), esiste la concreta possibilità che non funzioni perchè:
[cut]
Non ho molto tempo da dedicare al tuo problema, per cui ti do' una soluzione
che magari non e' elegantissima.
Ti serve un semplice multivibratore astabile con un ingresso di reset.
In pratica: l'astabile e' un circuito banale, realizzabile con pochissimi
componenti, al limite perfino su una breadboard, che ha due tipi di uscita.
Diciamo Alto e Basso.
Diciamo che tu sull'uscita del circuito metti un relais collegato ad una
sirena.
Quando l'astabile passa allo stato alto, il relais scatta ed attiva le
sirene.
Ora, l'astabile ha la caratteristica di cambiare stato continuamente ogni X,
ed X lo decidi tu in fase di progetto in maniera piuttosto semplice.
Ci sei?
In pratica hai un circuito che dopo X secondi, giorni, minuti, quel che ti
pare, cambia stato ed attiva le sirene.
A questo punto, se tu su questo circuito inserisci un reset, e magari
colleghi il filo del reset alla porta COM, o ad una delle porte Joystick,
hai quello che ti serve.
L'applicativo ogni due minuti manda il segnale sulla porta.
Il segnale resetta l'astabile, le sirene non suonano ed il timer interno
dell'astabile ricomincia a contare.
Il PC/l'applicativo/qualsiasicosa si pianti, il segnale di reset non parte e
dopo due minuti e 20 secondi dall'ultimo segnale di reset l'astabile
commuta, attiva il relais e quest'ultimo attiva la sirena.
Per il circuito rivolgiti all'apposito NG, io qui andavo a memoria dalle
lezioni di elettronica a scuola. Cmq, ti garantisco che e' fattibile e se va
male spenderai una decina di euro.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 al PC?".
LOL
Comunque si può, se:
* hai un UPS
* il S.O. ne è consapevole ;-)
* il SW dell'UPS è regolarmente installato e funzionante
* il programma sa cosa fare.
In parole povere: un UPS, se manca la corrente, alimenta la macchina
finché può; dopo un certo tempo, se vede che non ce la fa più, avvisa il
SO, di solito via seriale, che inizia la procedura di spegnimento, mandando
un segnale di avviso ai vari programmi, i quali hanno la responsabilità
di salvare i propri dati correttamente prima della chiusura.
In VB, il posto giusto per fare queste cose è da individuare nella catena
QueryUnload->Unload->Terminate di ogni form.
Io nella QueryUnload controllo l'UnloadMode, se è = vbAppWindows
salvo senza richiesta di conferma, a seconda del programma, su
file definitivi o temporanei. All'avvio del prog controllo se ci sono file
temporanei e nel caso carico quelli, ripristinando lo /status quo ante/ (ciao pal :-) ).
Bye, G.

Infatti, è l'approccio a cui stavo pensando fin dall'inizio.
Ho rispolverato un mio vecchio libro della Jackson Italiana Editrice,
vecchio di 20 anni almeno, sul timer 555 e le sue applicazioni.
Anche le breadboard ho dovuto rispolverare :-D
Mah, vedremo cosa ne verrà fuori.
grazie a tutti.
Geppino