vb多线程:怎样用VB写多线程

尽管vb5是apprent single-thread(单线程)的.但用addressof加上一些api,就可以非常容易的做多线程.(比vc容易的多,做出来的东西也一样快,因为都是用api). 每一个县城(线程,下同)约占用20毫秒的时间片. vb5有一个主线程.我们可以另外加一个工作线程.对于不清楚什么是单/多线程的程序元,我们用一个简单的列子来说明一下. 再form里加上两个timer控件. 吧interval属性设成5000(5秒),然后在两个timer1_timer事件中放一个大loop,如for 10000 next. 运行. 你会看到第二个timer控件不会在五秒后执行,除非timer1的for-next结束. 同样,如果你的程序中有大量的数据库读写.你的用户街面可能被/"冻/".这时,我们就需要用多县城来改进程序了.(当然你可以用doevents来避免被冻,但用doevents有横多副作用.这里不提). 我们用的第一个api是createthread,vb的格式是: private declare function createthread lib /"kernel32/" (byval pthreadattributes as any,byval dwstacksize as long,byval lpstartaddress as long,lpparameter as any,byval dwcreationflags as long,lpthreadid as long) as long. (从vb api text viewer中拿是最真确的语法) createthread的参数指出你将要创立的县城是什么样子的. createthread的返回值是一个县城的handle. 这里是vb的多县城初始化程序: public sub initialize(lpfnbasfunc as long) dim dwstacksize as long dim dwcreationflags as long dim lpthreadid as long dim lpparameter as long dim mynull as long mynull = 0& /'create a null pointer dwstacksize = 0 /'0表示用exe stack size dwcreationflags = 4 /'用4表示初始化后先不激活,让别人来激活. me.thread = createthread(mynull,dwstacksize,lpfnbasfunc,mynull,dwcreationflags,lpthreadid) if me.thread = mynull then msgbox /"create thread failed/" end if end sub 下面是两个api用来激活/暂定该线程. private declare function resumethread lib /"kernel32/"(byval hthread as long)as longprivate declare function suspendthread lib /"kernel32/"(byval hthread as long)as long 让我们来用一个变量表示当前县城的状态. public threadstatus as boolean 在vb里,可用property来实现threadstatus的管理. public property let enabled(byval vnewvalue as boolean) if vnewvalue = true and me.threadstatus = false then resumethread me.thread me.threadstatus = true elseif me.threadstatus = true then suspendthread me.thread me.threadstatus = false endif end property 这个简单的类可以用new object来引用: /'make new thread object dim mythread as new clsthreads /'创建县城 foo mythread.initialize addressof foo /'激活县城 mythread.enabled = true 执行后,你可以用pview95.exe看到你的线程. 你还可以提高你的线程的优先级. setthreadpriority /'设优先级getthreadpriority /'查优先级 你把以上的程序加入timer例子,就会看到两个timer同时运行. 这里要提醒一下. vb5的开发环境是单县城的.如果你的程序写错,或中断后试图恢复,往往会出错,有时是gpf错.总之,用vb写多线程可以写出和vc一样快的程序.而且开发容易的多,开发速度也快得多.

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...