众所周知,VB6的多线程并不稳定,但也不代表完全不能应用于实际软件。只是限制颇多,使用繁琐。在极端追求数学运算效率的软件中,可以使用多线程来充分发挥多核CPU的性能,从而成倍的提升软件整体效率。(仅在多核电脑上能提高效率)
当然,如果一定要使用VB自带函数以及访问VB控件。要严格按照下述使用限制来执行。
限制:
1、新建线程中使用的变量最好提前声明。隐式声明可能会导致不可预料的结果。
2、不同线程不能同时操作同一变量,需要使用临界函数“排队”操作。否则程序会崩溃或者得到意料之外的输出结果。但是和vb的doevents一样,该类函数在VB中极大的影响线程效率,要尽量避免使用。
3、新建线程中系统自带MSGBOX无法使用(用了和没用一样,但程序不会崩溃)
4、新建线程中一部分VB自带函数在高速运算下不稳定(如IsNumeric doevents)使用SLEEP延时隔开能降低崩溃几率。主要原因是超过了VB自身机制所能承受的稳定极限的刷新频率。
5、合理、低速调用调用窗体控件方法、属性不崩溃。调用速度超过VB自身主线程刷新频率时会一定几率导致程序崩溃或显示不正常。建议不要求效率的情况下使用SLEEP延时1毫秒。若追求效率可用其他形式绕过刷新机制。
6、不能直接在新建线程中定义新的数组,而是要这样定义:
Dim ts() As String
ReDim ts(1000)
如果直接Dim ts(1000) As String 会导致程序崩溃
7、新建线程启动子过程(模块里的sub)无法传入参数,可以考虑用全局变量代替
8、部分API(如一部分GDI绘图函数)在多线程下会以异步多线程的方式运行。而与单线程相比不能增加执行效率。
9、其他限制等待着大家去发现
与其它VB多线程方法相比的优点:
1、可以跨线程调用
2、合理、低速调用VB自带函数、控件不崩溃,只进行数学运算绝对不会崩溃
3、【重要】可以编译为本机代码,优化全开。而不是坑爹的慢如乌龟的PCODE。