当前位置:首页 » 操作系统 » vb多线程源码

vb多线程源码

发布时间: 2022-06-10 07:32:30

① VB如何实现多线程

用CreateThread API函数根本无法实现VB6多线程!虽然系统提供了这个API函数,但是这种实现方法对VB6程序极其不稳定,容易出现非法操作。如果确实需要多线程的话,请使用控件,此处可以下载MThreadVB
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=26900&lngWId=1
打字不易,如满意,望采纳。

② VB能不能实现多线程运行,

先说多线程:
方法 1 : CreateThread
不用多说,万变不离其宗,这是 Win32 内创建线程的唯一系统方法,以下介绍的多线程创建方式虽然不直接接触这个 Win32 APi,但系统也是通过他创建的。

方法 2 : TimerSetEvent
这个函数是 Win32 系统的一个高精度计时器函数,通过调用这个函数,系统会创建一个新的线程,让Timer回调函数中的代码运行在这个新线程中。

方法 3 : SHCreateThread
很多人应该没见过这个函数,这是 shlwapi.dll 的一个导出函数,这个函数看字面也能理解是个创建多线程的函数,而且。。。 他是基于对象操作的多线程函数,也就是说他能够稳定的运行一些用上面2种方法创建,但不能稳定运行的代码。至少这个函数在 IDE 的环境下表现的中规中矩! 使用方法可查 API-GUIDE

方法 4 :CreateRemoteThread
创建远程线程,经测试一点也不稳定,根本没法说下去了,还不如直接调用 CreateThread
但,做为一种线程的创建方法,还是希望能够熟悉一下,如果不用VB写代码,要写跨进程线程,这是一个简单易行的办法,否则只能继续SetWindowHook了,熟悉汇编指令的还可以远程分配内存写硬编码执行

方法 5 : 简单说下 ActiveX 方式的多线程
用 ActiveX 创建线程与其他方式创建的线程最重要的地方要主义,任何VB函数的调用最好都建立在新线程中新初始化的对象基础上执行,不要跨对象调用,而 ActiveX 的安全线程本身也正是利用了这点,不知道研究 ActiveX 的老大们有没注意,利用他特性实现的多线程,是初始化的一个新的线程,而这个线程中初始化的对象则是整个工程。很大的资源浪费,而且有时候还不好控制,不是你想要的效果。总之一句话,新线程中要自己初始化新的对象而且最好不要用实例继承

③ VB怎么样实现多线程

据说 ACTIVEX.EXE文件 叫多进程 并非多线程~
其实你不如用VB.net来创建多线程 2,3行代码而已
用合适的工具 解决问题才是首选

④ VB中如何实现多线程

用CreateThread API函数根本无法实现VB6多线程!虽然系统提供了这个API函数,但是这种实现方法对VB6程序极其不稳定,容易出现非法操作。如果确实需要多线程的话,请使用控件,此处可以下载MThreadVB
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=26900&lngWId=1

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

如果是vb6.0不好实现,即使使用网上的api函数或者vb帮助里的activedll实现效果都不是很好!
我的方法是,直接使用多进程代替多线程!

⑥ VB怎么实现稳定的多线程程序

相关代码如下:

Private Const MyEvent As String = "m5home"
Dim hEvent As Long
Sub Main()
If GetEventHandle = 0 Then '由于每个新对象的建立,都要执行Main()过程,因此使用事件对象来进行判断.
hEvent = CreateEvent(0&, False, False, MyEvent) '在单元线程下,模块里的全局变量已经没有用了.frmMain.Show
End If
End Sub

Private Function GetEventHandle() As Long
GetEventHandle = OpenEvent(EVENT_ALL_ACCESS, False, MyEvent)
Call CloseHandle(GetEventHandle)
End Function

Public Function Quit()
Call CloseHandle(hEvent)
End Function

Private Const MyEvent As String = "m5home"

Dim hEvent As Long

Sub Main() If GetEventHandle = 0 Then '由于每个新对象的建立,都要执行Main()过程,因此使用事件对象来进行判断.
hEvent = CreateEvent(0&, False, False, MyEvent) '在单元线程下,模块里的全局变量已经没有用了.frmMain.Show
End If
End Sub

Private Function GetEventHandle() As Long GetEventHandle = OpenEvent(EVENT_ALL_ACCESS, False, MyEvent)
Call CloseHandle(GetEventHandle)
End Function

Public Function Quit()
Call CloseHandle(hEvent)
End Function
由于事件对象是系统范围的,因此可以比较完美的完成这个工作.
同时事件对象在进程消失后,会自动释放,也方便:)
示例代码可以生成一个新的单元线程,并在这个线程里面显示一个窗体,窗体进行一个大循环.
循环内没有放入DoEvents函数,因此会造成循环所在窗体无响应.
而此时主窗体不受影响.

⑦ 关于VB多线程的问题

兄弟啊。。VB搞这个总之是蹩脚。不是不行,而是毫无必要。我倒是会搞,不过实在是太麻烦了。写起来会消耗很多时间,先给你一个临时方案,不行就等我明天晚上有时间了在教教你。

在线程结束前使用API ExitProcess退出你的程序。
要领:切忌在VB中调试!ExitCode推荐传入0.

⑧ VB多线程示例!

窗体代码:Private Sub Command1_Click()
'为addnumber过程创建线程
Call CreateNewThread(AddressOf addnumber)
End Sub

Private Sub Command2_Click()
TerminateTh '终止线程
Unload Me '结束程序
End Sub
模块:Private Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long
Private Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long
Private Declare Function SetThreadPriority Lib "kernel32" (ByVal hThread As Long, ByVal nPriority As Long) As Long
Private Declare Function GetThreadPriority Lib "kernel32" (ByVal hThread As Long) As Long
Private Declare Function ResumeThread Lib "kernel32" (ByVal hThread As Long) As Long
Private Declare Function SuspendThread Lib "kernel32" (ByVal hThread As Long) As Long
Private Declare Function GetCurrentThread Lib "kernel32" () As Long
Private Declare Function GetCurrentThreadId Lib "kernel32" () As LongPrivate Const MAXLONG = &H7FFFFFFF
Private Const THREAD_BASE_PRIORITY_IDLE = -15
Private Const THREAD_BASE_PRIORITY_LOWRT = 15
Private Const THREAD_BASE_PRIORITY_MAX = 2
Private Const THREAD_BASE_PRIORITY_MIN = -2
Private Const THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX
Private Const THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN
Private Const THREAD_PRIORITY_ABOVE_NORMAL = (THREAD_PRIORITY_HIGHEST - 1)
Private Const THREAD_PRIORITY_BELOW_NORMAL = (THREAD_PRIORITY_LOWEST + 1)
Private Const THREAD_PRIORITY_ERROR_RETURN = (MAXLONG)
Private Const THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE
Private Const THREAD_PRIORITY_NORMAL = 0
Private Const THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT
Private Const CREATE_ALWAYS = 2
Private Const CREATE_NEW = 1
Private Const CREATE_NEW_CONSOLE = &H10
Private Const CREATE_NEW_PROCESS_GROUP = &H200
Private Const CREATE_NO_WINDOW = &H8000000
Private Const CREATE_PROCESS_DEBUG_EVENT = 3
Private Const CREATE_SUSPENDED = &H4
Private Const CREATE_THREAD_DEBUG_EVENT = 2Public Enum ThreadPriority
tpLowest = THREAD_PRIORITY_LOWEST
tpBelowNormal = THREAD_PRIORITY_BELOW_NORMAL
tpNormal = THREAD_PRIORITY_NORMAL
tpAboveNormal = THREAD_PRIORITY_ABOVE_NORMAL
tpHighest = THREAD_PRIORITY_HIGHEST
End EnumPrivate mThreadHandle As Long'示例
Function addnumber() As Long
Dim i As Long
For i = 0 To 100000
Form1.Label1.Caption = i
Next
End Function'创建线程
Public Function CreateNewThread(ByVal cFunction As Long) As Long
Dim mhandle As Long
Dim lpThreadID As Long
mhandle = CreateThread(ByVal 0&, ByVal 0&, cFunction, ByVal 0&, 0, lpThreadID)
If mhandle <> 0 Then mThreadHandle = mhandle
End Function'终止线程
Public Function TerminateTh() As Long
SuspendThread mThreadHandle
TerminateThread mThreadHandle, ByVal 0&
TerminateThread lpThreadID, ByVal 0&
End Function

⑨ vb 怎么实现多线程

Vb.net简单,vb得用API实现而且相当麻烦和不稳定 。不稳定是vb6自身控件不是线程安全的,所以多线程统统不能用。所以界面不能用控件而得用API实现,这样vb多线程才稳定,但是那样可视化开发的优势全无。
建议用Vb.net线程简单,只要
Dim aaa As New Thread (线程函数代码名称)
aaa.Start 即可启动线程了

⑩ vb实现多线程与控制台程序~~高分啊

我看你就是想做一个VB模拟Dos的玩意

我倒是有这么一段代码

发给你好了,这是我做“木马”娱乐时写的

往床体里添加textbox 叫 text2

那个 Dos 的过程的参数out就是你不想让删除的东西

Dim CData As String
Dim user As String
Dim sel As Long
Public Sub Dos(out As String)
CData = CData & vbCrLf & out
If Len(CData) > 30000 Then CData = out
Text2.Text = CData & user
Text2.SelStart = Len(CData)
End Sub

Private Sub Form_Load()
CData = ""
data = ""
End Sub

Private Sub Form_Unload(Cancel As Integer)
Ts(j).senddata "CMD Exit" & Chr(13) & Chr(10)
End Sub

Private Sub Text2_Change()
If Mid(Text2.Text, 1, Len(CData)) = CData Then
user = Mid(Text2.Text, Len(CData) + 1)
Else
Text2 = CData + user
End If
End Sub

Private Sub Text2_KeyDown(KeyCode As Integer, Shift As Integer)
If Text2.SelStart <= sel Then Text2.SelStart = sel
user = Mid(Text2.Text, Len(CData) + 1)
End Sub

Private Sub Text2_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
Ts(j).senddata "CMD " & user
CData = CData & user
user = ""
Text2.Text = CData
End If

End Sub

热点内容
云服务器项目实施方案 发布:2024-11-02 04:26:00 浏览:245
写入存储 发布:2024-11-02 04:20:21 浏览:30
JavaString替换 发布:2024-11-02 04:14:29 浏览:559
百度查询脚本 发布:2024-11-02 04:14:22 浏览:98
阴阳师ios如何登录安卓 发布:2024-11-02 04:03:03 浏览:708
服务器公网ip地址可以改吗 发布:2024-11-02 04:01:32 浏览:960
大内网没上传 发布:2024-11-02 04:00:52 浏览:912
光遇如何用账号和密码登录 发布:2024-11-02 04:00:07 浏览:415
政府存储肉 发布:2024-11-02 03:57:27 浏览:798
安卓91桌面怎么退出 发布:2024-11-02 03:42:50 浏览:672