加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 23:57:44 所属栏目:大数据 来源:网络整理
导读:尽管vb5是apprent single-thread(单线程)的.但用addressof加上一些api,就可以非常容易的做多线程.(比vc容易的多,做出来的东西也一样快,因为都是用api). 每一个县城(线程,下同)约占用20毫秒的时间片. vb5有一个主线程.我们可以另外加一个工作线程.对于不清楚什
尽管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一样快的程序.而且开发容易的多,开发速度也快得多.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读