




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VB6多线程示例。本文详细介绍了VB6多线程,程序不崩溃的方法。值得下载! VB6多线程示例。本文详细介绍了VB6多线程,程序不崩溃的方法。值得下载!隐藏1.Module1.bas请将该部分数据保存为 Module1.bas 文件Attribute VB_Name = Module1线程安全属性数据结构;Public Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As LongEnd Type这个是用于多线程访问临界资源同步Api的数据结构Public Type CRITICAL_SECTION dummy As LongEnd Type为什么用GDI 函数绘图?原因等下再讲Public Declare Function GetDC Lib user32 (ByVal hwnd As Long) As LongPublic Declare Function SetBkColor Lib gdi32 (ByVal hdc As Long, ByVal crColor As Long) As LongPublic 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 LongPublic Declare Function ReleaseDC Lib user32 (ByVal hwnd As Long, ByVal hdc As Long) As Long请注意;createThread APi声明已被我修改过,修改的地方请自行参照APIView复制的内容Public 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这个是sleep,作用就是让两个线程绘图频率不一致,效果才明显。Public Declare Sub Sleep Lib kernel32 (ByVal dwMilliseconds As Long)Public Declare Sub EnterCriticalSection Lib kernel32 (lpCriticalSection As CRITICAL_SECTION) 进入临界区Public Declare Sub LeaveCriticalSection Lib kernel32 (lpCriticalSection As CRITICAL_SECTION) 离开临界区几个重要的函数举例ObjPtr:返回对象实例私有域的地址。StrPtr:返回字符串第一个字的地址。VarPtr:返回变量的地址。全局的form的句柄!Public formhandle As Long临界数据结构Public sect As CRITICAL_SECTIONSub OutText1() 过程一Dim i As LongDim dc As LongDim 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) 释放资源! Call EnterCriticalSection(sect) 上下表示该处为临界区,如果要对工程全局变量做操作,最好在该区域内 否则线程同步过程中,非常容易让程序崩溃 Call LeaveCriticalSection(sect)End SubSub OutText2() 和过程一类似Dim i As LongDim dc As LongDim 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) Call EnterCriticalSection(sect) Call LeaveCriticalSection(sect)End Sub关于为何使用gdi 函数输出文本,这是一个很重要的内容;程序在记数时用了难用的TextOut 函数,而没有使用标签控件,这是因为vb的组件不都是线程安全的,当多线程访问不是线程安全的组件,那么会产生严重错误。2.Form1.frm请将该部分数据保存为 FORM1.frm 文件VERSION 5.00Begin VB.Form Form1 Caption = 多线程 ClientHeight = 3195 ClientLeft = 60 ClientTop = 345 ClientWidth = 6450 LinkTopic = Form1 ScaleHeight = 3195 ScaleWidth = 6450 StartUpPosition = 3 窗口缺省 Begin VB.TextBox Text1 Height = 270 Left = 960 TabIndex = 2 Text = 2 Top = 2760 Width = 2415 End Begin VB.CommandButton Command2 Caption = 返回 Height = 255 Left = 3480 TabIndex = 1 Top = 2760 Width = 1455 End Begin VB.CommandButton Command1 Caption = Start Count Height = 255 Left = 3480 TabIndex = 0 Top = 240 Width = 1455 End Begin VB.Label Label1 AutoSize = -1 True Caption = 主线程执行结果测试: Height = 180 Left = 600 TabIndex = 3 Top = 2400 Width = 1710 EndEndAttribute VB_Name = Form1Attribute VB_GlobalNameSpace = FalseAttribute VB_Creatable = FalseAttribute VB_PredeclaredId = TrueAttribute VB_Exposed = FalsePrivate Sub Command1_Click()声明了线程ID Dim threadid1 As Long Dim threadid2 As Long参数一,lpThreadAttributes 线程安全属性,传递为NULL 参数二,dwStackSize ,线程堆栈大小,可以为0,表示堆栈和此应用堆栈相同参数三,lpstartAddress ,执行函数地址,用AddressOf 获取参数四,lpParameter ,执行函数的参数地址,可以是一个记录或者是别的类型,用VarPtr获取参数地址(varptr为未公开函数)!参数五,dwCreationFlags ,表示线程创建后的状态!,0表示立即运行,create_SUSPENDED表示线程挂起参数六,lpThreadID 表示分配给线程的线程号 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 SubPrivate
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论