仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 630|回复: 8
打印 上一主题 下一主题

[学习教程] ASP教程之ASP.NET教程:WaitHandle类

[复制链接]
不帅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:05:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。当程序运转时,碰着了一个问题,假如WaitHandle数组凌驾64个元素以后,WaitHandle工具的WatiAll办法复工了。厥后为了程序能运转,只得想了一个笨举措:先创立两个WaitHandle工具放在数组,然后用轮回两个两个地运转义务。比来笔者在用.Net写程序时碰到一个成绩:有N个互不相干的义务要在线程池中跑,但有一个线程要守候N个义务完成以后才干持续。而这个N是个未知数,大概会很年夜(因而才会想到利用线程池而不是手动往new一个therad)。翻了翻.Net类库的文档,发明一个叫WaitHandle的类。这个类的用法挺有意义,必要为每一个线程创立一个WaitHandle工具并把它们放在一个数组中,然后用WaitHandle类中的WaitAll办法来守候这些WaitHandle被挪用Set办法。(代码就不写了,能够参考MSDNhttp://msdn.microsoft.com/zh-cn/library/system.threading.waithandle.aspx)
固然以为这有点庞大,但仍是试了试。当程序运转时,碰着了一个问题,假如WaitHandle数组凌驾64个元素以后,WaitHandle工具的WatiAll办法复工了。厥后为了程序能运转,只得想了一个笨举措:先创立两个WaitHandle工具放在数组,然后用轮回两个两个地运转义务。代码的思绪也许是上面如许:
WaitHandle[]handles=newWaitHandle[]{newAutoResetEvent(false),newAutoResetEvent(false)};inttimes=(int)N/2;inti;for(i=0;i<times;i++){ThreadPool.QueueUserWorkItem(newWaitCallback(Tasks[i*2]),handles[0]);ThreadPool.QueueUserWorkItem(newWaitCallback(Tasks[i*2+1]),handles[1]);WaitHandle.WaitAll(handles);}if(i*2<N){ThreadPool.QueueUserWorkItem(newWaitCallback(Tasks[i*2+1]),handles[0]);WaitHandle.WaitAny(handles);}

固然代码这么写对照庞大,但最少能够包管运转时不会出成绩。但这么写代码明显其实不KISS!因而问了问妙手,说有个RegisterWaitForSingleObject办法,但一看这个办法的参数列表就够让人晕的了。有点吊唁Java了,记得Java中有个CountDownLatch类,创立类的时分赋一个初始值X,然后主线程中挪用await,线程池中跑的线程挪用countDown办法。就能够完成主线程守候X次countDown办法挪用以后持续。如许既没有64个WaitHandle的限定,也不必往研讨谁人RegisterWaitForSingleObject办法。不外成绩在于.Net中并没有这么一个器材,只能本人下手了。
classCountDownLatch{privateobjectlockobj;privateintcounts;
publicCountDownLatch(intcounts){this.counts=counts;}
publicvoidAwait(){lock(lockobj){while(counts>0){Monitor.Wait(lockobj);}}}
publicvoidCountDown(){lock(lockobj){counts--;Monitor.PulseAll(lockobj);}}}

有了这个器材,下面的代码能够改的更少一些。
CountDownLatchcdl=newCountDownLatch(N);for(inti=0;i<N;i++){ThreadPool.QueueUserWorkItem(newWaitCallback(Tasks[i]),cdl);}cdl.Awati();

而关于义务的代码来讲,在开头处吧对WaitHandle的Set办法的挪用改成对CountDownLatch类的CountDown办法的挪用便可。
最初,我想说的是实在没需要把思绪都拘谨在.Net上大概Java上,互相自创会让思绪更坦荡一些。
不外有句内心话想说的就是,实在Java的类库在某些方面做的比.Net好一些。

缺点:安全性不是太差了,还行,只要你充分利用系统自带的工具;唯一缺点就是执行效率慢,如何进行网站优化以后,效果会比较好。
活着的死人 该用户已被删除
沙发
发表于 2015-1-18 20:15:10 来自手机 | 只看该作者
Response:从字面上讲是“响应”,因此这个是服务端向客户端发送东西的,例如Response.Write
分手快乐 该用户已被删除
板凳
发表于 2015-1-27 20:24:55 | 只看该作者
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
深爱那片海 该用户已被删除
地板
发表于 2015-2-5 15:07:59 | 只看该作者
我就感觉到ASP和一些常用的数据库编程以及软件工程方面的思想是非常重要的。我现在也在尝试自己做网页,这其中就用到了ASP,我想它的作用是可想而知的。
若相依 该用户已被删除
5#
发表于 2015-2-12 11:55:03 | 只看该作者
Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
6#
发表于 2015-3-3 03:36:00 | 只看该作者
先学习用frontpage熟悉html编辑然后学习asp和vbscript建议买书进行系统学习
再现理想 该用户已被删除
7#
发表于 2015-3-11 09:45:49 | 只看该作者
ASP主要是用好六个对象,其实最主要的是用好其中两个:response和request,就可以随心所欲地控制网页变换和响应用户动作了。
小魔女 该用户已被删除
8#
发表于 2015-3-18 08:06:01 | 只看该作者
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。
灵魂腐蚀 该用户已被删除
9#
发表于 2015-3-25 18:32:27 | 只看该作者
用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 20:28

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表