No soy capaz de instanciar un semáforo

La pregunta es simple:
si quiero instanciar un semáforo desde javascript, cómo lo hago?

Aún no he sido capaz de localizar los datos del servicio para instanciarlo… (contractID o lo que sea)
Alguien me puede explicar cómo lo hago?

Gracias

Se supone que con esta página debería saber cómo hacerlo, pero no lo entiendo…
Qué es eso de using namespace?

developer.mozilla.org/En/XPCOM_ … ronization

Para mí un ejemplo sería lo más sencillo… no consigo que funcione!!!

Hola

La pagina que has puesto es para c++, javascript normalmente usa APIs asíncronas para cosas que son “no instantáneas” por lo que los semáforos son innecesarios (casi siempre).

¿que exactamente es lo que estas tratando de hacer?

Un saludo

hola, gracias por contestar

A ver, yo lanzo varias operaciones asíncronas simultáneamente y necesito saber cuándo han terminado todas antes de continuar la ejecución del programa sin que la espera provoque la típica ventana de que “el script parece bloqueado”…

Alguna idea?

Lo que hago es leer el contenido binario de varios adjuntos a correos.
Al leer el contenido binario de varios adjuntos a correos, la función callback es asíncrona y necesito saber cuándo han terminado todas…

var utiles = Components.utils.import(“resource:///modules/gloda/mimemsg.js”);
utiles.MsgHdrToMimeMessage(msgHdr, null, callback, true, null);

var callback=function(msgHdr,mimeMessage){ … aquí leo el contenido binario del adjunto

El problema es que lanzo esta operación varias veces y tengo que esperar hasta que todas han terminado sin que se considere que el script se ha que dado “colgado”…

Hola

Creo que me hago una idea de lo que quieres hacer. En javascript puedes hacer varias operaciones asincronas y saber cuando han terminado todas asi: (por ejemplo)


var utiles = Components.utils.import("resource:///modules/gloda/mimemsg.js");

function leerVariosAdjuntos(arrayAdjuntos,callback){
    var trabajos = arrayAdjuntos.length;

    var trabajoAcabado = function(msgHdr,mimeMessage){
        // Esto se ejecuta cada vez que se lee un adjunto, procesalo aquí,
        // o guárdalo en un array para procesarlo después
        trabajos--;
        if(trabajos==0){
            callback();
        }
    }

    for(var i=0,l=arrayAdjuntos.length; i<l; ++i){
        utiles.MsgHdrToMimeMessage(arrayAdjuntos*,null,trabajoAcabado,true,null);
    }

}


//Ejemplo de uso
leerVariosAdjuntos([msgHdr1,msgHdr2],function(){
    //Esto se ejecuta cuando TODOS los adjuntos se han leeido
});

He puesto el nombre de mis funciones en español para que se entienda mejor.

Después ya se puede hacer mas complejo según tus necesidades, dime si te vale.

Saludos*

Parece que sí que funciona, muchas gracias por la ayuda!!!