2014-05-14 7 views
5

Avevo creato questo codice per gestire i thread in PhoneGap, ma se eseguo questo codice ho ricevuto il seguente errore.multi thread Problema in ios e android PhoneOne

Thread 14 WebCore: Database: EXC_BAD_ACCESS (code = 1, address = Oxbbadbeef) 

Sono anche utilizzando un altro thread che si presenta come quello che avevo incollato sopra, improvvisamente la mia crash dell'applicazione e ottenere lo stesso messaggio di errore, e vorrei anche utilizzare lo stesso codice multi filo sia per Android e Ios qualcuno potrebbe suggerirmi un modo migliore per riutilizzare lo stesso codice sia per Android che per Ios?

Quindi cosa mi manca in questo, e come posso risolvere questo?

Ecco il mio codice:

function itmerStart() 
{ 
    if (timerId) return 

     timerId = setInterval(loadMessageListCron, 20000); 

    function loadMessageListCron() 
    { 
     var userid = window.localStorage.getItem("userId"); 
     if(userid != undefined) 
     { 
      alert("thread calling.."); 
      $.ajax("//abc.com/Rest/get_all_messages?UserId="+ userid).done(function(data) 
      { 
       var i, response; 
       $.each(data.messages, function (i, response) 
       { 
inboxMessageItmerStop();                       insertMessages(response, i); 
inboxMessageItmerStart(); 
     }); 
     }); 
     } 
    } 
} 
+0

Non sono sicuro che il multithreading o il javascript abbiano a che fare con il tuo problema. Questo sembra il panico del kernel da un cattivo accesso. Probabilmente stai tentando di inviare un messaggio a un oggetto deallocato nell'obiettivo C o di accedere a una risorsa in un modo non sicuro del thread. Puoi pubblicare il codice nativo? – Lorenzo

+0

Molto simile a @Lorenzo ha commentato, questo non sembra un problema di multithreading. setIntrval non è realmente multithreading in JavaScript. Non sono sicuro che Cordova implementa questo, ma per ottenere un vero multithreading in JavaScript, dai un'occhiata a [web workers] (http://www.html5rocks.com/en/tutorials/workers/basics/). – Merlin

risposta

0

Il problema potrebbe essere con la funzione loadMessageListCron ancora in esecuzione quando viene chiamato di nuovo. Prova qui sotto:

var delay = (function() 
{ 
    var timer = 0; 
    return function(callback, ms){ 
     clearTimeout (timer); 
     timer = setTimeout(callback, ms); 
    }; 
})(); 


function loadMessageListCron() 
{ 
    var userid = window.localStorage.getItem("userId"); 
    if(userid != undefined) 
    { 
     alert("thread calling.."); 
     $.ajax("//abc.com/Rest/get_all_messages?UserId="+ userid).done(function(data) 
     { 
      var i, response; 
      $.each(data.messages, function (i, response) 
      { 
      }); 
     }); 
    } 
} 


setInterval(function(){ 
    var pause = 1000; 
    delay(function() { 

    loadMessageListCron(); 
    }, pause); 
}, 20000);