Forum Italiano sui Prodotti NI

取消
顯示結果 
搜尋替代 
您的意思是: 

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 積分
1 條訊息(共 7 條)
4,980 檢視

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 積分
2 條訊息(共 7 條)
4,977 檢視

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!!

下載全部
0 積分
3 條訊息(共 7 條)
4,951 檢視

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 積分
4 條訊息(共 7 條)
4,938 檢視

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 積分
5 條訊息(共 7 條)
4,935 檢視

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 積分
6 條訊息(共 7 條)
4,924 檢視

Ti ringrazio, proverò questa soluzione.

0 積分
7 條訊息(共 7 條)
4,922 檢視