Newsgroup: it.comp.lang.visual-basic
Titolo: Applicazione occupata? Perché? (difficile)

E' una domanda un po' difficile temo!
Ho realizzato una add-in per mappoint in visual basic. Io faccio il seguente
ciclo (calcola la distanza tra coppie di città, in
linea d'aria oppure stradale):
    For i = 1 To numcitta
        For j = i + 1 To numcitta
            If (Percorso = 1) Then
                With objMap.ActiveRoute
                    .Waypoints.Add objLoc(i)
                    .Waypoints.Add objLoc(j)
                    .Calculate
                    distanze(i, j) = CLng(.Distance)
                    .Clear
                End With
            Else
                distanze(i, j) = CLng(objMap.Distance(objLoc(i), objLoc(j)))
            End If
         Next j
    Next i
Se calcolo le distanze stradali, ci mette circa 2-3 secondi a distanza, e
dato che ne devo calcolare molte (anche 100 o più) a volte impiega
parecchio. Il problema è questo: quando sta eseguendo il ciclo, se il numero
di città è
abbastanza alto, ad un certo punto mi da il seguente errore:
"L'operazione non può essere completata perché l'applicazione è occupata.
Scegliere il pulsante appropriato sulla barra delle applicazioni per
attivare l'applicazione occupata e correggere il problema."
Non lo da sempre allo stesso punto, a volte dopo 20 distanze calcolate, a
volte dopo 30... e se premo il pulsante "riprova" all'inizio funziona e
continua ad eseguire il ciclo, ma dopo un po' di volte che premo "riprova"
va tutto in tilt.
Se invece calcolo le distanze in linea d'aria (è molto più veloce, impiega
una frazione di secondo) il programma non si blocca.
Da cosa dipende? Ho poca memoria? (lavoro su un pentium II   con 192 mb di
memoria, uso win98). Può dipendere da come lavora lo scheduler? Ho provato a
chiudere tutti gli altri processi, ma non conta niente...
Grazie 1000 a chiunque mi da una dritta!!!
Guybrush  (
m_is...@freemail.it
)

 attivare l'applicazione occupata e correggere il problema."
Questa domanda viene data in genere da un activeX che fa da server.
Es.:
Il server va in errore e esce una msgbox, o qualsiasi cosa che lo blocca
(potrebbe anche essere in debug stoppato), cioè non lo lascia proseguire con
la successiva istruzione.
Il tuo applicativo usa questo activex come server e richiama un metodo.
L'activex VB ti risponde con: "aò, questo qui non risponde! Che vogliamo
fare?" (più o meno).
Devi trovare il perchè si blocca. Sinceramente non so se di default gli
activex hanno un timeout prima di dare l'errore per cicli chiusi ad esempio.
Ciao.
------------------------- SiDB Simple DataBase engine ----
------------------------- adParser Expression evaluator --
 
http://space.virgilio.it/zntf...@tin.it/
----------------------------------------------------------

 activex hanno un timeout prima di dare l'errore per cicli chiusi ad
esempio.
Grazie, ora vedo di fare delle prove... il fatto che non si blocchi sempre
allo stesso punto, ma a volte fa più iterazioni ed altre meno mi fa pensare
che ci sia una sorta di timeout... ora lo provo anche su altri pc, non si sa
mai!
Ciao! (Se qualcuno sa di preciso di cosa si tratta e mi da qualche info
utile lo ringrazio moltissimo!)
Guybrush

 utile lo ringrazio moltissimo!)
Dai un'occhiata su MSDN alle proprieta' OLEServerBusyTimeout e
OLERequestPendingTimeout dell'oggetto App
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown