以前也看过有高手在wsh上可以创建thread对象,但是毕竟不是常规手段,我们做web应用一般没有本地访问权限的,用activex的没试过,毕竟也不是javascript方式。
以前我们解决这样的问题都是针对具体问题写一段代码来模拟多线程的,但是由于往往要对没个线程单独编码,这样的代码十分冗长(http://www.blogjava.net/Files/emu/counting.zip)。学习设计模式的时候就曾经考虑过在javascript中实用command模式来更好的模拟多线程,但是一直没有付诸实施,今天既然想起来了就试试看:
<html>
<head>
<title>emu -- 用command模式模拟多线程</title>
</head>
<body>
<SCRIPT LANGUAGE="JavaScript">
<!--
var commandList = [];
function executeCommands(){
if (commandList.length>0){
commandList.shift()();
}
}
function startNewTask(){
var resultTemp = document.createElement("span");
document.body.insertBefore(resultTemp,document.body.lastChild);
document.body.insertBefore(document.createElement("br"),document.body.lastChild);
resultTemp.innerText = 0;
commandList.push(function(){simThread(resultTemp,0);});
}
function simThread(temp,n){
temp.innerText = temp.innerText-(-n);
if (n<1000)
commandList.push(function(){simThread(temp,++n);});
else{
document.body.removeChild(temp.nextSibling);
document.body.removeChild(temp);
}
}
window.onload = function(){setInterval("executeCommands()",1);}
//-->
</SCRIPT>
<button onclick="startNewTask()">start</button>
<BR><BR>
</body>
</html>
注意第11行。javascript里面函数也是对象,所以就没有必要把函数调用包装到do或者execute方法里面了,直接用()就可以让函数对象运行起来:
commandList.shift()();
shift函数是javascript中array对象的函数,可是IE5居然没有定义,不过我曾经实现过IE5上面没实现的全部array函数,可以用这个脚本来增强IE5: http://www.blogjava.net/Files/emu/IE5ArrayFunctions.zip
分享到:
相关推荐
本文实例讲述了JavaScript使用yield模拟多线程的方法。分享给大家供大家参考。具体分析如下: 在python和C#中都有yield方法,通过yield可以实现很多多线程才能实现的功能。 对javascript有版本要求:JavaScript 1.7...
为了解决这个问题,JavaScript社区引入了一些机制来模拟多线程,例如Web Workers。 "一个JavaScript多线程函数库"的目标就是提供这样的解决方案,允许开发者并行执行多个JS函数,提高应用性能。这个库可能利用Web ...
本文将深入探讨JavaScript的单线程和多线程概念,解释它们如何影响程序的执行,以及如何在实际开发中利用这些特性。 JavaScript的单线程和多线程模型各有优势和挑战。开发者需要根据应用的具体需求,合理选择并发...
本实例“idhttp多线程模拟登录”聚焦于这两个主题,利用Delphi编程语言和Indy库来实现。Delphi是一款强大的RAD(快速应用开发)工具,而Indy则是一个用于网络通信的开源组件库,它提供了多种协议的支持,包括HTTP,...
在本主题中,我们将深入探讨如何使用JavaScript实现一个简单的模拟计算器。这个计算器可能包括基本的算术运算,如加、减、乘、除,以及可能的清零和错误处理功能。 首先,我们需要创建一个HTML页面作为计算器的界面...
介绍了一个可以在JavaScript中应用多线程的库:Concurrent.Thread,内有多线程库脚本,以及使用说明和实例,如果查看详情,可以查看我的博客https://blog.csdn.net/hsl_1990_08_15/article/details/84765772
3. **模拟多线程**:由于 JavaScript 的单线程特性,我们无法真正实现多线程,但可以通过一些技巧来模拟多线程的效果,比如利用回调函数、`setTimeout` 或者 `setInterval` 来控制任务的执行顺序和并发度。...
在JavaScript中,我们可以使用setTimeout或者requestAnimationFrame来模拟这种时间延迟和动画效果。 `lightbox.html` 文件很可能是这个示例的主要展示页面,它可能包含HTML结构,用于展示关机效果的按钮或其他触发...
这种模型避免了多线程可能导致的竞态条件和死锁问题,但同时也带来了挑战,例如阻塞主线程可能导致页面无响应。 ### 二、setTimeout和setInterval 1. **setTimeout**: 这个函数用于在指定的毫秒数后调用一个函数...
JavaScript应用实例-多线程.js
在“testPopuBox”这个例子中,我们可以预期它包含了一个HTML文件,可能还有CSS和JavaScript文件,用于展示如何使用`iframe`创建模拟弹出框的过程。HTML文件可能包含一个`iframe`元素,通过修改其`src`属性加载指定...
通过对Javascript模拟训练题目的分析,我们可以总结出以下基础知识点: 1. 文件类型:JS文件的扩展名是“.js”,它是一种用于客户端脚本的文件类型。 2. 变量命名规则:Javascript中的变量名可以由字母、数字和...
总之,Winform应用中的多线程调用JavaScript需要结合WebBrowser控件、多线程技术和线程同步技巧。通过正确地组织代码,可以在不阻塞用户界面的情况下,充分利用JavaScript的计算能力,提升应用程序的用户体验。
JavaScript应用实例-多线程测试.js
描述中提到的“加快网页读取和下载文件速度”,是指这种工具在访问网页或下载文件时,通过多线程技术将网页的HTML、CSS、JavaScript以及图片等资源分成多个部分,同时进行加载,使得用户可以更快地看到完整的网页...
如MapReduce模型,使用多线程处理海量数据。 2. 一致性哈希:在分布式系统中,用于负载均衡和数据分布,确保线程安全的数据访问。 以上只是专家级多线程技术的部分内容,实际应用中还需结合具体编程语言和平台特性...
于是,本人使用JavaScript的数组模拟Hashtable集合,说明JavaScript数组的特别之外。 环境:Windows XP Professional, IE 6.0 阅读对象:所有学习JavaScript的学员。 注:本示例代码注释非常详细,请仔细阅读体会...
通过这个视频教程,开发者将能够掌握ASP.NET中多线程的应用,理解如何在IIS环境下优化Web应用,同时学习到Socket编程、模拟IIS、一般处理程序的使用,以及如何实现异步无刷新分页和有效利用服务器端控件。...