欢迎来到天天文库
浏览记录
ID:18691007
大小:95.00 KB
页数:10页
时间:2018-09-20
《vb创建多线程应用程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、问题背景:有时候我们做程序时有这样的需求:有一个需要运行时间很长的循环,那么程序只有等待循环运行结束后才执行别的程序代码,这样机器一直处于循环之中,而不能响应别的事情,对CPU资源来说是一种浪费,那么可不可以既让循环执行,又可以执行程序另外的一部分代码呢?答案是可以的,那就要用到多线程了。相关知识:进程:是指程序在一个数据集合上运行的过程,是操作系统进行资源分配和调度运行的一个独立单位,简单来说进程就是程序的一次执行。进程的两个基本属性:1.进程是一个可拥有资源的独立单位;2.进程同时又是一个可以独立调度和分配的基本单位。操
2、作系统中引入进程的目的是为了使多个程序并发执行,以改善资源利用率及提高系统的吞吐量。线程:线是进程中的一个实体,是被系统独立调度和分配的基本单位。线程自己基本上不拥有系统资源,只拥有一些在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。同一个进程中的多个线程之间可以并发执行。问题实现:VB可不可以创建多线程呢?答案:VB本身不可以,但用API函数VB可以实现。在VB中创建线程用到以下几个API函数:'创建线程API'此API经过改造,lpThreadAttributes改为Any型,lpStar
3、tAddress改为传值引用:'因为函数入口地址是由形参变量传递,如果用传址那将传递形参变量的地址而不是函数的入口地址'参数dwStackSize为应用程序堆栈大小,lpStartAddress为函数入口地址PrivateDeclareFunctionCreateThreadLib"kernel32"(ByVallpThreadAttributesAsAny,ByValdwStackSizeAsLong,ByValyearsmortgagehousing;4.mortgageregistrationformalitiesar
4、ecompleted.(D)pledge1.borrower(includingthepledgor)between18-65yearsofage,withfullcivilcapacity;2.collaterallpStartAddressAsLong,lpParameterAsAny,ByValdwCreationFlagsAsLong,LpthreadIdAsLong)AsLong'终止线程APIPrivateDeclareFunctionTerminateThreadLib"kernel32"(ByValhThre
5、adAsLong,ByValdwExitCodeAsLong)AsLong'激活线程API,参数hThread为CreateThread创建的线程句柄PrivateDeclareFunctionResumeThreadLib"kernel32"(ByValhThreadAsLong)AsLong'挂起线程APIPrivateDeclareFunctionSuspendThreadLib"kernel32"(ByValhThreadAsLong)AsLong 了解完上面的API函数后请看下面的实例:实例效果:此实例实现三个图片
6、框的背景色一起变色。实例的窗体布局见图:yearsmortgagehousing;4.mortgageregistrationformalitiesarecompleted.(D)pledge1.borrower(includingthepledgor)between18-65yearsofage,withfullcivilcapacity;2.collateral 程序的工程窗口: 源代码见:《VB创建多线程应用程序(二)》yearsmortgagehousing;4.mortgageregistrationformali
7、tiesarecompleted.(D)pledge1.borrower(includingthepledgor)between18-65yearsofage,withfullcivilcapacity;2.collateral源代码如下:窗体中的代码:OptionExplicit '开始PrivateSubCommand1_Click()OnErrorResumeNextWithmyThreadleft.InitializeAddressOfFillleft'传递过程地址给线程.ThreadEnabled=TrueEndW
8、ithWithmyThreadright.InitializeAddressOfFillright.ThreadEnabled=TrueEndWithWithmyThreadbottom.InitializeAddressOfFillbottom.ThreadEnabled=TrueEnd
此文档下载收益归作者所有