|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
一个很大的类库。应用程序之所以难以跨平台,在于直接调用了特定平台的接口,而一个巨大的类库,就能极大地减少应用程序对平台的依赖。多线程 前两天做了一个自界说单件Timer,该Timer可以依据响应数据纪录(Row)中的纪录ID和设定分钟Minutes做响应的事务挪用,可是假如此事务处置程序在一Form中时则不克不及准确挪用它,可是把82到93行的正文往失落就能够了。
Timer大致界说以下:
1usingSystem;
2usingSystem.Threading;
3usingSystem.ComponentModel;
4usingSystem.Windows.Forms;
5
6/************************************************************
7*MyTimer.Timer可以依据统一Timer准时基准对分歧的准时事务做准时。
8*
9*MyTimer.Timer包括一Hashtable和Threading.Timer,每次Timer准时回调
10*遍历Hashtable并依据个中的TimerNode的准时周期值是不是为零来判别是不是挪用
11*响应的TimerCome事务。
12*************************************************************/
13namespaceMyTimer
14{
15///<summary>
16///事务准时节点
17///</summary>
18internalclassTimerNode
19{
20///<summary>
21///机关函数
22///</summary>
23///<paramname="TimeCount">准时周期数</param>
24///<paramname="EvtID">事务ID</param>
25publicTimerNode(longTimeCount,objectEvtID)
26{
27this.mTimeCount=TimeCount;
28this.mEvtID=EvtID;
29}
30privatelongmTimeCount;
31privateobjectmEvtID;
32
33publiclongTimeCount
34{
35get{returnmTimeCount;}
36set{mTimeCount=value;}
37}
38publicobjectEvtID
39{
40get{returnmEvtID;}
41}
42}
43
44publicclassTimerEventArgs:EventArgs
45{
46privateSystem.Collections.ArrayListmEvtIDs;
47publicSystem.Collections.ArrayListEvtIDs
48{
49get{returnmEvtIDs;}
50}
51
52///<summary>
53///机关
54///</summary>
55///<paramname="EvtIDs">触发的事务ID列表</param>
56publicTimerEventArgs(System.Collections.ArrayListEvtIDs):base()
57{
58this.mEvtIDs=EvtIDs;
59}
60}
61
62publicdelegatevoidTimerEventHandler(TimerEventArgse);
63
64///<summary>
65///Timer单件形式,不克不及实例化。
66///</summary>
67publicclassTimer
68{
69///<summary>
70///有节点准时到事务
71///</summary>
72publicstaticeventTimerEventHandlerTimeCome;
73
74///<summary>
75///叫醒TimeCome事务。
76///</summary>
77///<paramname="e">此参数包括准时到事务列表</param>
78staticvoidRaiseTimeCome(TimerEventArgse)
79{
80if(TimeCome!=null)
81{
82//if(TimeCome.TargetisSystem.ComponentModel.ISynchronizeInvoke)
83//{
84//System.ComponentModel.ISynchronizeInvokeaSynch=TimeCome.TargetasSystem.ComponentModel.ISynchronizeInvoke;
85//if(aSynch.InvokeRequired)
86//{
87//object[]args=newobject[1]{e};
88//aSynch.BeginInvoke(TimeCome,args);
89//}
90//else
91//TimeCome(e);
92//}
93//else
94TimeCome(e);
95}
96}
97staticreadonlylongmPeriod=1000*60;//准时距离1分钟。
98staticSystem.Threading.TimermTimer;
99staticTimer()
100{
101mTimer=newSystem.Threading.Timer(newTimerCallback(TimeArrive),null,Timeout.Infinite,mPeriod);
102}
103
104///<summary>
105///准时器入手下手运转
106///</summary>
107publicstaticvoidRun()
108{
109mTimer.Change(0,mPeriod);
110}
111
112///<summary>
113///准时器中断。
114///</summary>
115publicstaticvoidStop()
116{
117mTimer.Change(Timeout.Infinite,mPeriod);
118}
119
120///<summary>
121///到场准时事务,假如此准时事务已存在则修正其准时周期。
122///</summary>
123///<paramname="EvtID">事务ID</param>
124///<paramname="TimeCount">周期数</param>
125publicstaticvoidAdd(objectEvtID,longTimeCount)
126{
127if(mTimerNodes.ContainsKey(EvtID))
128{
129((TimerNode)mTimerNodes[EvtID]).TimeCount=TimeCount;
130}
131else
132mTimerNodes.Add(EvtID,newTimerNode(TimeCount,EvtID));
133}
134
135///<summary>
136///移除此准时事务
137///</summary>
138///<paramname="EvtID">事务ID</param>
139publicstaticvoidRemove(objectEvtID)
140{
141if(mTimerNodes.ContainsKey(EvtID))
142mTimerNodes.Remove(EvtID);
143}
144
145///<summary>
146///此函数是基准准时器mTimer的回调函数,
147///在此函数中将反省事务表,准期事务准时周期数已到则将其到场事务参数中
148///并叫醒事务。
149///</summary>
150///<paramname="state"></param>
151staticvoidTimeArrive(objectstate)
152{
153System.Collections.ArrayListEvtIDs=newSystem.Collections.ArrayList();
154foreach(TimerNodeaNodeinmTimerNodes.Values)
155{
156aNode.TimeCount--;
157if(aNode.TimeCount<=0)
158{
159EvtIDs.Add(aNode.EvtID);
160}
161}
162if(EvtIDs.Count>0)
163{
164for(inti=0;i<EvtIDs.Count;i++)
165{
166mTimerNodes.Remove(EvtIDs[i]);
167}
168RaiseTimeCome(newTimerEventArgs(EvtIDs));
169}
170}
171
172///<summary>
173///事务表
174///</summary>
175staticSystem.Collections.HashtablemTimerNodes=newSystem.Collections.Hashtable();
176}
177
178
179}
180
我认为,可以通过更加简单的首次编译,而增加第二次编译的负担,来提高java的运行效率。只是将java源代码进行简单的等价转换,而不假设编译成某种虚拟机器的目标格式,而由本地编译器针对性的二次编译。 |
|