作者:梁利锋 标签:VB二三事, Thread

5554天前 (阅读:7222)

  以前我写过一些 VB5/6 的多线程的例子程序,不过都没有使用线程同步函数。不过后来考虑,线程同步函数是必须要用的,否则,在一些不同的情况下,还是可能出错,即使是单条汇编指令,在多 CPU 的机器上可能也会出错,何况 VB 的程序,编译成几条汇编指令本也不很确定。

  这一个示例程序,使用了线程同步函数,使用的是 CriticalSection族函数,是互锁代码段的函数,对于 VB 程序比较合适,另外的原子方式访问的 InterlockedEchange 类函数应该也可以用,不过只能对于单个的长整形,而且速度比较快,不过用途比较单一,所以没有使用。

  当然,写多线程程序,还是使用 VB.NET 更有效、方便的多,如果不是必须使用 VB5/6,则最好不要使用就是了。


点睛 VB5/6 多线程示例 第三版(源代码)下载

行星(非注册用户) 2004-3-19 16:47:34

程序退出还是有毛病。

梁利锋 2004-3-22 20:17:05

我的测试,用VB5编译没有问题(退出也正常),但是用VB6(SP5)则无法正常运行,原因未知。

yujt(非注册用户) 2004-4-15 13:51:59

ghjkyukyuiku

28235535(非注册用户) 2004-4-15 13:53:30

、这个不是很清楚 啦,
是不是所有和软件有问题类,
还是不支持它啦

lhfeng(非注册用户) 2004-5-21 22:44:19

我也用过了,开始的时候还正常,后来就出错了。我还以为是我的电脑的问题呢!

梁利锋 2004-5-23 16:01:43

开始的时候还正常,后来就出错了?这恐怕真的是你的电脑的问题吧?

lixiaoming(非注册用户) 2004-7-16 14:01:52

为什么我把它生成EXE运行不了呢?

sdf(非注册用户) 2005-11-17 12:43:39

是啊有时可用有时又不可用

kylechen(非注册用户) 2005-12-1 13:25:12

老梁同志,我运行你编译好的程序一点问题都没有,可是用你的源代码(没有任何改动)在VB6下自己编译的EXE总是导致系统错。经查,我把所有的CriticalSection同步相关的语句注释掉程序表现怪异(意料中)但是不会崩溃。有空请帮着看看这个问题,是否同步技术导致的问题还是你编译的exe有什么特殊环境?谢谢。有结果了还忘不吝赐教,我的email: kylechen999@163.com

adamdog(非注册用户) 2006-1-6 23:50:07

看看你写得程序运行的效果,呵呵,两个数你跑一会我跑一会,那也叫多线程啊?不过,你能用VB写出来也就不错了。你对DoEvents了解好像不深哦。

vicmiao(非注册用户) 2007-12-7 20:03:01

你的文章和源码让我学到不少,我很喜欢。但我是第一次看到用中文定义变量和函数名,看着源码有点不习惯。

bin(非注册用户) 2009-6-8 14:07:59

请问如果把线程同步的api分离出来,如何使用?
  Call EnterCriticalSection(g_cs)

  Call LeaveCriticalSection(g_cs)
是不是应该包含在每个操作数据库函数里面

梁利锋 2009-6-9 9:22:49

@bin:不太明白什么叫分离出来,对于api来说,你只要保证调用两个函数时使用的参数是同一个地址就可以了。