Forum Italiano sui Prodotti NI

annulla
Visualizzazione dei risultati per 
Cerca invece 
Intendevi dire: 

GetUserEvent causa un General Protection fault

Buongiorno,

durante un ciclo while richiamo la GetUserEvent ma quest'ultima mi va in FATAL RUN-TIME ERROR.

Questo errore capita in maniera apparentemente randomica perchè alcune volte succede appena eseguito il programma, altre volte passa qualche istante.

La cosa strana è che in altri punti del progetto utilizzo la GetUserEvent allo stesso modo ma non ho mai avuto problemi.

Per programmare utilizzo Labwindows CVI 2012 SP1.

Avete qualche idea su quale possa essere il problema??

Grazie in anticipo.

 

0 Kudos
Messaggio 1 di 7
4.022Visualizzazioni

E' difficile fare un'ipotesi senza avere qualche informazioni in più ed eventualmente parte del sorgente. Come hai giustamente notato anche tu, il problema non è nella GetUserEvent che in altri punti del programma funziona correttamente, quindi deve trattarsi dell'interazione di quell'istruzione in quel punto del programma con altri moduli o istruzioni caricati in prima di chiamarla.

Puoi darci il testo esatto dell'errore e il codice della funzione in cui chiami la GetUserEvent? Prima che avvenga l'errore hai caricato funzioni particolari che negli altri punti non sono usate? Controlli customizzati, controlli della libreria Toolslib, librerie di terze parti...?



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 Kudos
Messaggio 2 di 7
4.019Visualizzazioni

Rispetto ad altre parti del progetto non ci sono chiamate in più o controlli etc. Il progetto è strutturato più o meno tutto allo stesso modo.

Ti allego le due immagini, l'errore e anche il codice della funzione. 

Se servono altre info chiedi pure.

Grazie!!

Scarica tutti
0 Kudos
Messaggio 3 di 7
3.993Visualizzazioni

Boh, visto così non mi salta all'occhio nulla di strano.

Però avendo 0 come primo parametro di GetUserEvent la funzione termina immediatamente indipendentemente dalla presenza di eventi oppure no, quindi dovresti valutare se eventi ci sono stati e se no eventualmente saltare a fine loop giusto per evitare di sovraccaricare la macchina eseguendo istruzioni inutili; inoltre iEvent si trova sia all'interno della funzione che come valore di ritorno, quindi non so alla fine della riga che valore contenga...

L'errore capita alla prima esecuzione del loop o in tempi successivi?



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 Kudos
Messaggio 4 di 7
3.980Visualizzazioni

Il fatto che iEvent è sia all'interno che come valore di ritorno è un errore mio, comunque anche togliendolo come lvalue non cambia.

Questo errore capita ogni volta in tempi diversi, quasi mai alla prima chiamata.

0 Kudos
Messaggio 5 di 7
3.977Visualizzazioni

Bè, come ti dicevo non si vede nel codice qualcosa di evidente che possa spiegare l'errore.

Io proverei comunque a gestire il valore di ritorno della GetUserEvent:

while (iContinue)
{
   iEvent = GetUserEvent (0, &tmp, &iControl);
   if (iEvent < 0) {
      // Errore: gestire
   }
   else if (!iEvent)
      goto Loop:

   // Qui il resto del codice

Loop:
   iContinue = ....
}


Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 Kudos
Messaggio 6 di 7
3.966Visualizzazioni

Ti ringrazio, proverò questa soluzione.

0 Kudos
Messaggio 7 di 7
3.964Visualizzazioni