VB无所不能之七:VB的多线程(2)
来源:互联网 发布:金蛇雾化器做丝数据 编辑:程序博客网 时间:2024/05/19 17:47
VB无所不能之七:VB的多线程(2)
作者:钟声
友情链接(非广告,完全是出于友情):
云查杀很牛X的金山毒霸!免费啦!2011下载链接!
久违啦,我今天终于又可以写博客了,VB无所不能这个系列写作途中总是磕磕绊绊的,终于写到第七篇多线程的时候,中断了长达1个多月的时间没有更新新帖,对大家说声抱歉,由于本人这个月遇到很多棘手之事情,没有顾得上。
好了,言归正传了,继续我们的VB无所不能之旅。
好了,言归正传了,继续我们的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
输出文本:
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 As Long) 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
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 As Long) 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
'声明了线程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
好,我们再来看运行效果,如图所示:
好了,本文实现了一个初步的多线程调用的例子,剩下的事情就请大家八仙过海各显神通了!!
钟声写的关于Java方面的书:
《Java程序员,上班那点事儿》:
前言,目录
卓越网销售链接
China-pub销售链接
当当网销售链接
《Java程序员,上班那点事》纪念帖
关于下载《Java程序员,上班那点事儿》的电子版
--------------------------------------------
- VB无所不能之七:VB的多线程(2)
- VB无所不能之七:VB的多线程(1)
- VB无所不能之三:VB截获Windows消息的钩子
- VB无所不能之六:对程序运行的监控
- VB无所不能之六:对程序运行的监控
- VB无所不能之五:建立“标准”DLL动态链接库文件(2)
- VB是如何做到无所不能的
- VB无所不能之一:指针
- vb学习之七
- VB无所不能之五:建立“标准”DLL动态链接库文件(1)
- VB无所不能之二:利用GDI+处理图像格式转换
- VB无所不能之四:制作透明和半透明窗体
- vb.net的多线程
- vb多线程
- vb 多线程
- VB多线程
- vb多线程
- Henry的VB.NET之旅(七)—脆弱的基类
- 继续谈JAVA虚拟机
- 各种基本算法实现小结(四)—— 图及其遍历
- qt 槽与信号
- SQL 语句学习
- 各种基本算法实现小结(五)—— 排序算法
- VB无所不能之七:VB的多线程(2)
- 视频资源
- 各种基本算法实现小结(六)—— 查找算法
- SQL 语句获取表名列名
- 各种基本算法实现小结(七)—— 常用算法
- 《Windows核心编程》---CAPIHook类
- Floyd算法
- 试用 commons-pool
- 2010年(第24届)电子信息百强企业名单