标题好像讲座,所以我这里第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 , 只有在编译后才能完全看到效果