▁▂▃▄▅▆▇█▉▊关于多线程▉█▇▆▅▄▃▂▁

Caney 2001-03-07 04:25:00
谁有在VB中使用CreateThread()函数的经验,望指教。
我的测试代码如下:
Private Sub Command1_Click()
Dim Sec As SECURITY_ATTRIBUTES
Dim mychar
Dim TTT As Long
TTT = CreateThread(Sec, 0, AddressOf ThreadProc, 0, 0, 0)
End Sub
'该函数保存于模块中
Function ThreadProc(lpParameter As Variant)
MsgBox "ok"
End Function

其中CreateThread()的参数一,应当置为Null,但我使用了Null和VBNullString都失败,只得使用了SECURITY_ATTRIBUTES结构。
线程函数,按照MSDN中应当声明为DWORD WINAPI ThreadProc(
LPVOID lpParameter),在VC中测试通过;但在VB中实在不知道如何声明,才有了以上的代码。
——————————————————————————————————————
望有经验者指点。
——————————————————————————————————————
...全文
242 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Un1 2001-03-09
  • 打赏
  • 举报
回复
1:把CreateThread的第一的参数申明为: ByRef As Any, 调用时使用 ByVal 0.
2:ThreadProc的参数申明和CreateThread中保持一致。
Caney 2001-03-09
  • 打赏
  • 举报
回复
to TechnoFantasy(www.applevb.com)
是用了你的方法,还是返回错误“该内存不可写”.
uThread.Handle = CreateThread()的第一个参数必须为SECURITY_ATTRIBUTES类型。
VB中对NULL的使用只能是0领来替代吗?
在VC中,我使用Null来替代第1、4个参数,可以执行。
bucher 2001-03-09
  • 打赏
  • 举报
回复
在www.mvps.org找找 不推荐用vb直接写多线程,可以用VC。
wzcyc 2001-03-08
  • 打赏
  • 举报
回复
我记得
TTT = CreateThread(Sec, 0, AddressOf ThreadProc, 0, 0, 0)
应该是
TTT = CreateThread(Sec, 0, AddressOf Module1.ThreadProc, 0, 0, 0)
Caney 2001-03-08
  • 打赏
  • 举报
回复
"可以定义为 Byval sec as LONG"
你是说将Function ThreadProc(lpParameter As Variant)改成
Function ThreadProc(Byval sec as LONG)吗?可是不行啊。
CreateThread()的第三个参数是应当穿递线程函数的收地址,而VB中应当如何处理。
Addressof是否可以在次应用?
shyguy 2001-03-08
  • 打赏
  • 举报
回复
如果不是activeX工程,我知道好象除了vb7,无法实现多线程
shyguy 2001-03-08
  • 打赏
  • 举报
回复
如果不是activeX工程,我知道好象除了vb7,无法实现多线程
fujiang2000 2001-03-08
  • 打赏
  • 举报
回复
怎么样让线程同步呢
TechnoFantasy 2001-03-08
  • 打赏
  • 举报
回复
我的范例中定义CreateThread是这样的:
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
调用:
lNull = 0
lStackSize = 0
lCreationFlags = CREATE_SUSPENDED
uThread.Handle = CreateThread(lNull, lStackSize, lpfnBasFunc, lNull, lCreationFlags, lpThreadId)
其中lpfnBasFunc是使用AddressOf函数获得的函数地址。
TechnoFantasy 2001-03-07
  • 打赏
  • 举报
回复
不知道你的参数是如何定义的,可以定义为 Byval sec as LONG
然后调用时将参数设置为0。这个方法是我在使用API函数CreateFile
时使用成功的,你试一下

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧