博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VB无所不能之七:VB的多线程(2)
阅读量:6280 次
发布时间:2019-06-22

本文共 3003 字,大约阅读时间需要 10 分钟。

        久违啦,我今天终于又可以写博客了,VB无所不能这个系列写作途中总是磕磕绊绊的,终于写到第七篇多线程的时候,中断了长达1个多月的时间没有更新新帖,对大家说声抱歉,由于本人这个月遇到很多棘手之事情,没有顾得上。
        好了,言归正传了,继续我们的VB无所不能之旅。
 
        上一篇我们在《VB多线程(1)》中给大家介绍了在VB中使用多线程的两个函数,一个是“
CreateThread ”另一个是“
Sleep”,这两个是使用多线程时用到的
Windows
kernel32提供的API函数。
        那么,本篇将具体用一个实例说明一下这两个函数是如何使用的。
 
        我们上文提到,“VB的大部分控件都不是线程安全的”,因此,没有使用我们很熟悉的Text控件,我们为了完成本程序需要用到GDI函数绘图来实现多线程实现部分。
        我们会用到如下GDI函数,其声明及说明如下:
 
获取窗体句柄的DC:
Public Declare Function 
GetDC Lib "user32" (ByVal hwnd As Long) As Long
设置绘制区域的背景色,也起清除作用:
Public Declare Function 
SetBkColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
输出文本:
Public Declare Function 
TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
释放资源:
Public Declare Function 
ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
 
好,那么,我们开始建立程序:
 
步骤一:建立一个Module添加如下代码:
 
Declare 
Function GetDC Lib 
"user32" () Declare 
Function GetDC Lib 
"user32" (ByVal hwnd 
As Long) 
As Long 

Declare 
Function SetBkColor Lib 
"gdi32" () Declare 
Function SetBkColor Lib 
"gdi32" (ByVal hdc 
As Long, ByVal crColor 
As Long) 
As Long 

Declare 
Function TextOut Lib 
"gdi32" Alias 
"TextOutA" () Declare 
Function TextOut Lib 
"gdi32" Alias 
"TextOutA" (ByVal hdc 
As Long, ByVal x 
As Long, ByVal y 
As Long, ByVal lpString 
As String, ByVal nCount 
As Long) 
As Long 

Declare 
Function ReleaseDC Lib 
"user32" () Declare 
Function ReleaseDC Lib 
"user32" (ByVal hwnd 
As Long, ByVal hdc 
AsLong) 
As Long 


Declare 
Function CreateThread Lib 
"kernel32" () Declare 
Function CreateThread Lib 
"kernel32" (lpThreadAttributes 
As Any, ByVal dwStackSize 
As Long, ByVal lpStartAddress 
As Long, ByVal lpParameter 
As Long, ByVal dwCreationFlags 
As Long, lpThreadId 
As Long) 
As Long 


Declare 
Sub Sleep Lib 
"kernel32" () Declare 
Sub Sleep Lib 
"kernel32" (ByVal dwMilliseconds 
As Long) 


'全局的form的句柄! 

Public formhandle 
As Long 


OutText1() OutText1()    
'过程一 

        
Dim i 
As Long 

        
Dim dc 
As Long 

        
Dim s 
As String 

                dc = GetDC(formhandle) 
'获取窗体句柄的DC 

                
For i = 1 
To 100000 

                        s = 
CStr(i) 

                        
Call SetBkColor(dc, &HF0F0F0)    
'设置绘制区域的背景色,也起清除作用 

                        
Call TextOut(dc, 10, 10, s, 
Len(s)) 
'输出文本! 

                        
Call Sleep(40) 
'等待 

                
Next 

                
Call ReleaseDC(formhandle, dc)    
'释放资源! 


End 
Sub 


OutText2() OutText2()    
'和过程一类似 

        
Dim i 
As Long 

        
Dim dc 
As Long 

        
Dim s 
As String 

                dc = GetDC(formhandle) 

                
For i = 1 
To 100000 

                        s = 
CStr(i) 

                        
Call SetBkColor(dc, &HF0F0F0) 

                        
Call TextOut(dc, 10, 80, s, 
Len(s))    
'文本位置改变了 

                        
Call Sleep(20) 
'延时改变了 

                
Next 

                
Call ReleaseDC(formhandle, dc) 

End 
Sub
 
步骤二:建立一个窗体,添加如下组件,如图所示:
 
 
步骤三:在窗体中添加如下代码:
 
Sub Command1_Click() 
Sub Command1_Click() 

         

        
'声明了线程ID 

        
Dim threadid1 
As Long 

        
Dim threadid2 
As Long 


        
Call CreateThread(
Null, ByVal O&, AddressOf Module1.OutText1, VarPtr(0), ByVal 0&, threadid1) 

        
Call CreateThread(
Null, ByVal 0&, AddressOf Module1.OutText2, VarPtr(0), ByVal 0&, threadid2) 

         

End 
Sub 


Sub Form_Load() 
Sub Form_Load() 

        
'保存窗体句柄全局变量,用于在form 上绘图 

        formhandle = Form1.hwnd 

End 
Sub
 
好,我们再来看运行效果,如图所示:
 
 
好了,本文实现了一个初步的多线程调用的例子,剩下的事情就请大家八仙过海各显神通了!!
 
 本文转自 useway 51CTO博客,原文链接:http://blog.51cto.com/useway/326200,如需转载请自行联系原作者
你可能感兴趣的文章
openstack 制作大于2TB根分区自动扩容的CENTOS镜像
查看>>
Unbuntu安装遭遇 vmware上的Easy install模式
查看>>
几个常用的ASP木马
查看>>
python分析postfix邮件日志的状态
查看>>
Mysql-5.6.x多实例配置
查看>>
psutil
查看>>
在git@osc上托管自己的代码
查看>>
机器学习算法:朴素贝叶斯
查看>>
小五思科技术学习笔记之扩展访问列表
查看>>
使用Python脚本检验文件系统数据完整性
查看>>
使用MDT部署Windows Server 2003 R2
查看>>
Redhat as5安装Mysql5.0.28
查看>>
通过TMG发布ActiveSync
查看>>
Web服务器的配置与管理(4) 配置访问权限和安全
查看>>
2019年BAT面试通关宝典:数据结构+JVM+并发编程+分布式...
查看>>
CMarkupSTL 读写xml文件
查看>>
洛谷——P3119 [USACO15JAN]草鉴定Grass Cownoisseur
查看>>
codevs——1842 递归第一次
查看>>
转给正在找工作的应届生 2013年各大小IT公司待遇
查看>>
某源码thread,socket研究4
查看>>