Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript phonegap ios和android中的多线程问题_Javascript_Multithreading_Cordova - Fatal编程技术网

Javascript phonegap ios和android中的多线程问题

Javascript phonegap ios和android中的多线程问题,javascript,multithreading,cordova,Javascript,Multithreading,Cordova,我创建这段代码是为了处理PhoneGap中的线程,但是如果我运行这段代码,我会得到以下错误 Thread 14 WebCore: Database: EXC_BAD_ACCESS (code = 1, address = Oxbbadbeef) 我也在使用另一个线程,它看起来像我上面粘贴的线程,突然我的应用程序崩溃,并收到相同的错误消息,我也想在android和Ios上使用相同的多线程代码。有人能给我建议一种更好的方法,在android和Ios上重复使用相同的代码吗 那么,我在这件事上遗漏了什

我创建这段代码是为了处理PhoneGap中的线程,但是如果我运行这段代码,我会得到以下错误

Thread 14 WebCore: Database: EXC_BAD_ACCESS (code = 1, address = Oxbbadbeef)
我也在使用另一个线程,它看起来像我上面粘贴的线程,突然我的应用程序崩溃,并收到相同的错误消息,我也想在android和Ios上使用相同的多线程代码。有人能给我建议一种更好的方法,在android和Ios上重复使用相同的代码吗

那么,我在这件事上遗漏了什么,我该如何弥补呢

这是我的密码:

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

问题可能是loadMessageListCron函数在再次调用时仍在运行。请尝试以下内容:

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

我不太确定多线程或javascript是否与您的问题有关。这看起来像是错误访问导致的内核恐慌。您可能正试图向目标C中的解除分配对象发送消息,或者以线程不安全的方式访问资源。你能发布本机代码吗?就像@Lorenzo评论的那样,这看起来不像是多线程问题。setIntrval在JavaScript中不是真正的多线程。不确定cordova是否实现了这一点,但要在JavaScript中获得真正的多线程,请查看。