PctGL SERIES  
http://pctgl.cnblogs.com

标题好像讲座,所以我这里第1句话就先说,这只是我的个人经验总结,希望与大家共勉,如有不足敬请拍之。。


1.异步的执行方式

首先来说,对于异步我只能用个人理解来解释,因为我遍历 baidu,google 没找到关于异步的词解,

就连在线中华词典中也没有关于异步的解释。。。

个人理解异步,应以实际操作来表示,例如:

   1.你正在打电话  》 2.与 A 聊的火热ing   4.不得已先暂停与 A 通话        7.返回和 A 继续。。。
------------------------------------------------
                                       3.》 B 领导给你打电话了    5.接领导电话      6. 与领导通话完毕

可以看到 1 2 4 7 为一条主线上的任务
而      3 5 6   为另外的的分支任务

但全局执行方式却是 1234567 的顺序执行的,中间的任务分支变革就可以叫做 异步。

这就是异步的执行方式。


2.异步的Win32实现代码

简单一例,我便以 SetTimer、KillTimer 来实现。SetTimer 函数需调用一个回调函数,在这个回调函数

中我们做些手脚,这样异步代码就可以实现了。以这样代码实现异步的前提是第1个任务不能结束,如果第1个

任务结束了,那全部任务也该结束了。hoho。。。 貌似这也正好符合我们的需要哦?试想,我们应用多线程

最多的是什么?第1个任务执行多线程内容,第2个任务执行统计,甚至可以有第3,4,5.。。。


3.异步的应用

暂时没有想到好的应用,至于多线程的类似应用,大家尽可展开想像随意应用。

这里先用牛刀杀鸡,论坛中有人问过,怎样让一个程序弹出 N 个对话框(MsgBox),这个问题大家都有什么

好的解决方法?试试吧,好像除了多线程没有什么好的方法吧?不然你可以试试。那么对于单线程的一个简单的

解决办法,就用异步吧。一个 Msgbox 弹出后,这个任务还未完成,因为 Msgbox 本身有个消息循环,消息

循环未完成,视为任务未完成,待设置条件达到后,这里的条件可以视为又一个时间间隔事件被触发了,第2个

任务开始执行了,于是 Msgbox 又被弹出了,第2个任务也已经开始执行了,第3个,4个,5个。。。。

最终,我们可以通过停止任何一个任务而使得,停止新任务执行。但已经开始的任务不会停止,直到用户中止他

这是一个简单的异步应用,但从其内理来看,则是十分典型的异步多任务的执行方式。我们可以看到每个任务

都存在循环,而每个循环都在继续执行任务没有任何的搁置状态表现。


4.后语。。。

异步是可以替代一部分多线程的操作,可以最大的开发单线程效率,但异步不是多线程的替换之道。

 

多了解一些所谓的技术会让你编程时如虎添翼,解决问题时可以信手拈来,但不要钻牛角啊。。。

 

演示代码:

1. https://files.cnblogs.com/pctgl/Set!KillTimer.rar  (用标准模块写的,可以在 IDE 下直接看到异步效果)

2. 用单个类模块实现的 Timer , 只有在编译后才能完全看到效果

 

posted on 2009-08-06 14:48  PctGL  阅读(1251)  评论(0编辑  收藏  举报