Newsgroup: it.comp.lang.vo-clipper
Titolo: Situazione critica

Ciao a tutti,
dopo 2 settimane di sforzi inumani abbiamo messo in funzione una
macchina tessile automatica controllata da un PC con NT4 sp3 e un
nostro software scritto in VO, nuovo nuovo.
Il programma è composto da 2 parti:
	una si occupa di gestire un contatore (encoder) e i dati 	
	provienienti e da inviare a un server Novell+As/400 via Client
	access
	l'altra è in pratica un driver che colloquia via DDE col 
	programma di sopra e via seriale con un PLC
Il problema è la stabilità del driver.
Dopo aver risolto i vari GPF, abbiamo riscontrato che ogni tanto,
forse un paio di ore di lavoro continuato (ma non è regolare), il
driver fa' che uscire senza dire niente (nessun messaggio a video),
come se fosse stato fatto un "Termina processo" per intenderci.
La cosa mi fa' inc....re da bestia, e dovrei risolverlo prima che si
inc.....i qualcun altro :-))
Il driver è in pratica un loop all'interno del quale viene letta la
porta seriale, eventualmente manda dei comandi sia su DDE che seriale.
I parametri di compilazione, prima erano ottimizzati al massimo per le
prestazioni, ma poi abbiamo pensato di disattivare l'ottimizzazione
sperando di risolvere il dilemma.........niente :-(((
Qualche anima pia avrebbe una dritta ?
Grazie,
Antonello.


Come e' fatto il loop?. E' un ciclo DO WHILE?
Se e' cosi', probabilmente non dai mai tempo al Garbage Collector di
fare il suo lavoro.
Puoi provare o a inserire le istruzioni
IF .NOT. InCollect()
  CollectForced()
Endif
nel ciclo da chiamare ogni tot volte, oppure eliminare il ciclo e
utilizzare un timer.
Io ho una procedura analoga che gira otto ore al giono e non mi hanno
mai segnalato problemi di uscita anomali.

Scusate ma a volte mi perdo, ma a chi stai rispondendo?
Succede spesso che non riesco a tenere il filo del discorso, non è +
semplice per tutti se le risposte vengono annidate nelle domande?
Saluti
Roberto


 Sto rispondendo ad Antonello Negrone. Il tuo reader non di da i
thread?

Fabio Cresta - Italy ha scritto:

Ciao Fabio,
Puoi essere così gentile da spiegare meglio come è fatto e come lavora il
tuo timer analogico?
grazie
Paolo

mai segnalato problemi di uscita anomali.
Sono sicuro che trovata la soluzione, non darà problemi nemmeno il mio
driver.
Antonello.

Paolo
Nel Postinit della finestra (shellwindow o qualunque altra, ogni
finestra puo' avere il proprio timer), scrivi:
Self:Override()
SetTimer(Self:handle(), 1, nnnn, NULL_PTR)
nnn e' l'intervallo di tempo (in millisecondi) in cui si attiva il
timer.
PEr esempio mettendo 1000, il timer si attiva ogni secondo
Poi scrivi il metodo Dispatch()
METHOD Dispatch(oEvent) CLASS xxxxxxx
	IF oEvent:Message = WM:TIMER
		<istruzioni da eseguire ogni nnn millisecondi>
	ENDIF
	RETURN Super:Dispatch(oEvent)
Per disattivare il timer:
KillTimer(Self:Handle(), 1)

Antonello.
Se e' cosi', sembra tutto corretto.
Prova a verificare che non ti dia problemi il DDE (e' una brutta
bestia quasi quanto l'ODBC!!!!)

bestia quasi quanto l'ODBC!!!!)
Stavo avendo lo stesso sospetto, l'unica cosa che mi preoccupa è:
se è proprio il DDE...che ci posso fare ? :-(((((
Cmq, modificando i parametri di compilazione attivando la "full runtim
class ecc.ecc" a volte il driver viene terminato dandomi un errore
simile:
	No Errorblock
	DefError() : line 143
Può suggerire qualcosa ?
Antonello.

Può suggerire qualcosa ?
Di solito sono problemi di puntatori che vanno a pallino.
Se hai il contratto di supporto tecnico con CA, sull'ultimo numero
della rivista che viene inviata ai soci c'e' una serie di articoli che
indicano come procedere per trovarli.
Altrimenti guardati le discussioni sull'errore 46660 sul newsgroup
internazionale.

come Ole Server, e dal seconddo comunichi col primo via OLE.
Penso che sarà proprio quello che farò :-DDD
Grazie,
Antonello.