function myobj(){
var gup=this;
this.lastindex=-1;
this.criticalSectionInTimer=0;
this.updateTimer;
this.start = function(l){
if((typeof this.updateTimer)=="number"){
clearInterval (this.updateTimer);
}
this.updateTimer=setInterval(function() {gup.getMessages();} , 30);
}
this.stop= function(){
if((typeof this.updateTimer)=="number"){
clearInterval (this.updateTimer);
}
}
this.addUpdate(i){
//some code
}
this.rrrrnr=0;
this.getMessages = function(){
if(this.criticalSection==0){
this.criticalSection=1;
this.rrrrnr++;
console.log("in critical section"+this.rrrrnr);
var url="getmessages.php?lastindex="+this.lastindex;
$.getJSON(url,
function(data){
gup.lastindex=data.lastindex;
$.each(data.updates, function(i,item){
gup.addUpdate(item);
});
}
);
console.log("out critical section"+this.rrrrnr);
this.criticalSection=0;
}
}
}
var m= new myobj();
myobj.start();
У меня есть код сверху. У меня есть основной цикл, который делает обновления за определенный промежуток времени. Проблема в том, что я понял, что он попадает в «критический раздел», который я разделил на переменную this.criticalSection.критические разделы javascript или проблема семафора
Из firebug я получаю сообщения «в критическом разделе» + индекс и «из критического раздела» + индекс в правильном порядке, но запрос ajax все еще обрабатывается. Но я получаю запрос с тем же индексом, и я действительно не знаю, где искать проблему.
Есть ли встроенные функции для семафоров или критических секций в javascript?
Использование синхронных вызовов ajax обычно является плохим выбором. Пользовательский интерфейс полностью заблокирован и замерзает во время запроса. –
@ Jonathon Я обнаружил ту же проблему с блокировкой пользовательского интерфейса ( – vaske