2014-05-14 9 views
5

Ich hatte diesen Code erstellt, um Threads in PhoneGap zu behandeln, aber wenn ich diesen Code ausführen, erhalte ich den folgenden Fehler.multi thread Problem in phonegap ios und android

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

Ich benutze auch eine andere Threads, wie das aussieht, die ich oben geklebt hatte, plötzlich meine Anwendung abstürzt und die gleiche Fehlermeldung bekommen, und ich würde auch den gleichen Multi-Thread-Code für beide Android verwenden möchte und Ios könnte mir jemand einen besseren Weg vorschlagen, den gleichen Code für Android und iOS wieder zu verwenden?

Also was fehlt mir dabei und wie kann ich das beheben?

Hier ist mein Code:

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

Ich bin nicht sicher, ob Multithreading oder Javascript etwas mit Ihrem Problem zu tun hat. Dies sieht aus wie Kernel Panic von einem schlechten Zugriff. Sie versuchen wahrscheinlich, eine Nachricht an ein nicht zugeordnetes Objekt in Ziel C zu senden oder auf eine Ressource in einer Thread-unsicheren Weise zuzugreifen. Können Sie den systemeigenen Code posten? – Lorenzo

+0

Wie @Lorenzo kommentiert, sieht dies nicht wie ein Multithreading-Problem aus. setIntrval ist nicht wirklich Multithreading in JavaScript. Nicht sicher, ob cordova dies implementiert, aber um echtes Multithreading in JavaScript zu erhalten, werfen Sie einen Blick auf [web worker] (http://www.html5rocks.com/en/tutorials/workers/basics/). – Merlin

Antwort

0

Das Problem mit der loadMessageListCron Funktion läuft noch sein könnte, wenn es wieder aufgerufen wird. Versuchen Sie unten:

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);