Z
zqw0117
Unregistered / Unconfirmed
GUEST, unregistred user!
常常在 DFW 或我的群里面看到有朋友询问如何制作多线程程序, 以及如何让线程安全的和界面(或者说窗口)通讯的问题. 由于 VCL 框架并不是线程安全的, 所以导致在线程中如果要更新界面显示, 就必须使用 Synchronize 方法来做同步. 可是一旦这样做, 不可避免的就是在线程中需要声明一个没有参数的过程, 把所有数据暂存到线程的私有变量中, 然后用 Synchronize 来调用此过程, 此过程再直接读取线程私有变量, 直接访问窗体类, 或者其它控件来更新界面的显示. 比较典型的例子就是 Delphi 自己的 Demo, 在 Delphi 安装目录下的 Demo/Threads/thrddemo.dpr 文件. 可是该例子仍然有些不太灵活, 如果显示的控件发生改变, TSortThread 的声明也必须随着改变, 并且这个例子还不能实现一个线程同时对多个视图作出更新的功能 比如线程运行中, 窗体上有多个面板, 需要同时显示多种视图效果;
或者有多个选项卡, 用户随时切换到不同标签下就仅更新该选项卡上控件, 类似这样的功能该例子就无法实现了. 而这些功能又是非常常见的, 比如下载软件中, 更新蚂蚁下载点视图(网际快车中就有), 流量视图, 以及 ListView 中下载字节的统计等.
考虑到这些应用, 比较合适的就是 Observer (观察者) 模式, 不仅可以动态的加入/移出观察者, 也能够让线程类 (Core) 和显示类 (UI) 之间脱耦. 可谓一举多得. 于是我就试着写了个线程搜索路径下所有文件的例子, 在其中应用了 Observer 模式.
由于代码说明比较长, 我就把解释都贴在我的博客上了, 欢迎大家去踩踩:
我的Blog: http://blog.sina.com.cn/u/1435615353
一个用 Observer 模式实现的 Thread 线程文件搜索例子(上): http://blog.sina.com.cn/u/5591c079010005pq
一个用 Observer 模式实现的 Thread 线程文件搜索例子(下): http://blog.sina.com.cn/u/5591c079010005pr
例子实际上很简单, 但是可伸缩性和扩展性却比较高. 当然可能也有不足之处. 如果您有任何想法和指教, 请不吝赐教!
这里附一个抓图
http://album.sina.com.cn/pic/5591c07902000ct9
散分!呵呵,源代码已经发到www.2ccc.com上了,可惜需要等待审核,审核好慢哦!!!不过刚刚传到www.delphifans.com上了,已经可以访问了,有兴趣的朋友可以下载下来玩玩
http://www.delphifans.com/SoftView/SoftView_2289.html
2ccc.com上的已经可以下载了,地址是:
http://www.2ccc.com/article.asp?articleid=3740
我知道,DFW都是藏龙卧虎的地方,小弟的这个Demo只能当抛砖引玉,希望各位高手多多指教哈!
或者有多个选项卡, 用户随时切换到不同标签下就仅更新该选项卡上控件, 类似这样的功能该例子就无法实现了. 而这些功能又是非常常见的, 比如下载软件中, 更新蚂蚁下载点视图(网际快车中就有), 流量视图, 以及 ListView 中下载字节的统计等.
考虑到这些应用, 比较合适的就是 Observer (观察者) 模式, 不仅可以动态的加入/移出观察者, 也能够让线程类 (Core) 和显示类 (UI) 之间脱耦. 可谓一举多得. 于是我就试着写了个线程搜索路径下所有文件的例子, 在其中应用了 Observer 模式.
由于代码说明比较长, 我就把解释都贴在我的博客上了, 欢迎大家去踩踩:
我的Blog: http://blog.sina.com.cn/u/1435615353
一个用 Observer 模式实现的 Thread 线程文件搜索例子(上): http://blog.sina.com.cn/u/5591c079010005pq
一个用 Observer 模式实现的 Thread 线程文件搜索例子(下): http://blog.sina.com.cn/u/5591c079010005pr
例子实际上很简单, 但是可伸缩性和扩展性却比较高. 当然可能也有不足之处. 如果您有任何想法和指教, 请不吝赐教!
这里附一个抓图
http://album.sina.com.cn/pic/5591c07902000ct9
散分!呵呵,源代码已经发到www.2ccc.com上了,可惜需要等待审核,审核好慢哦!!!不过刚刚传到www.delphifans.com上了,已经可以访问了,有兴趣的朋友可以下载下来玩玩
http://www.delphifans.com/SoftView/SoftView_2289.html
2ccc.com上的已经可以下载了,地址是:
http://www.2ccc.com/article.asp?articleid=3740
我知道,DFW都是藏龙卧虎的地方,小弟的这个Demo只能当抛砖引玉,希望各位高手多多指教哈!