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();
Ich habe den Code von oben. Ich habe eine Hauptschleife, die Updates in einem bestimmten Zeitintervall macht. Das Problem ist, dass ich erkannt habe, dass es in den "kritischen Abschnitt" gelangt, den ich durch die Variable this.criticalSection abgegrenzt habe.
Von Firebug erhalte ich die Meldungen "in critical section" + index und "out critical section" +index in der richtigen Reihenfolge, aber die Ajax-Anfrage wird noch verarbeitet. Aber ich bekomme Anfrage mit dem gleichen Index und ich weiß wirklich nicht, wo für das Problem zu suchen.
Gibt es irgendwelche Buildin-Funktionen für Semaphoren oder kritische Abschnitte in Javascript?