如何在Javascript中锁定线程?

时间:2010-08-25 12:29:10

标签: javascript ajax threadpool

我想在一个线程运行时锁定其他线程。在.Net中可以使用锁定对象。我需要在AJAX中做同样的事情。

    function f_OrnekleriGetir(bKaydet) {

        var ddlKlinikId = "<%=ddlKliniklker.ClientID%>";
        var iKlinikId = $("#" + ddlKlinikId + " option:selected").val();
        var arrOrnekNolar = new Array();
        $(".tdOrnekNo").each(function(idx, td) {
            var sOrnekNo = $(td).html();
            arrOrnekNolar[idx] = sOrnekNo;
        });

        for (var i = 0; i < arrOrnekNolar.length; i++) {

                // i want to wait in here...
                f_OrnekGetirKaydet(arrOrnekNolar[i], iKlinikId, bKaydet);   
            }
        }
    }

有可能吗?

KR,

Çağın

3 个答案:

答案 0 :(得分:2)

您可以通过循环“锁定”主线程。不过,这里有一些主要的缺点。

  • JavaScript在浏览器的UI线程上运行。这意味着页面的UI被锁定,直到当前正在执行的JavaScript完成,阻止用户交互和呈现。
  • 某些浏览器会检测到需要很长时间才能完成的脚本,并询问用户是否要停止运行。
  • 如果浏览器没有响应,操作系统可能会询问用户是否要关闭浏览器。
  • 如果没有可靠的 break; 子句,您可能陷入无限循环。请记住,在您退出循环之前,不会执行任何其他代码(甚至不会回调)。唯一会改变的属性是异步更改的属性,例如 readyState 属性。

如果要在等待Ajax请求时锁定线程,可以同步发送请求。然而,这将与阻塞循环具有相同的缺点。

正如MunkiPhD所说,你可能错误地看待了这个问题。回调在JavaScript中被广泛使用以避免阻塞UI线程,几乎可以保证构造代码以在计时器或事件上使用回调函数将比您当前想到的要好得多。

答案 1 :(得分:1)

你不能在javascript中进行多线程处理。它都是单线程的。

答案 2 :(得分:0)

我不确定你是否可以在Javascript中锁定线程,但我认为这归结为一个设计问题。应该为可以并行运行的进程运行线程。如果您希望线程等待来自另一个线程的响应,那么您正在错误地查看该问题。

无论哪种方式,你有没有调查Web Workers