VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
楼主: download

[原创] 全球首创? 再次突破VB极限!VB真正稳定多线程(不用tlb,tls,ax,pcode)

  [复制链接]
 楼主| 发表于 2010-4-26 11:23:22 | 显示全部楼层
没玩过多线程。能否做过实际例子?例如:文件搜索,Load/Insert multi images from/to Database?
VBAdvisor 发表于 2010-4-26 11:14


你找个例子加到线程函数的第一行试试.

就不需要TLB了...有什么问题请留言.
回复 支持 反对

使用道具 举报

发表于 2010-4-26 11:24:37 | 显示全部楼层
做个标记,回头再细细研究..
回复 支持 反对

使用道具 举报

发表于 2010-4-26 11:47:13 | 显示全部楼层
觉得还是用tlb好
回复 支持 反对

使用道具 举报

发表于 2010-4-26 11:49:26 | 显示全部楼层
哦,这么先进?本来我还想叫你帮我调试一下这个的……我昨天晚上花了一个小时写了个线程切换的汇编代码,经调试发现不非法操作了,但是“打印预览”里面什么都不显示了……点“适应页宽”那个按钮就有显示了,但是只显示第一幅图片,而且显示得不对……估计是IE内部创建了多个类实例造成的,但是不确定……你先下载那个山寨Wiki源代码,然后用这个新的压缩包中的文件覆盖掉已有代码再调试……

PS:调试起来可不简单,要面对写在Byte数组里面的汇编……

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2010-4-26 12:16:22 | 显示全部楼层
11# download

'Module
  1. Option Explicit
  2. Public Declare Function CreateIExprSrvObj Lib "msvbvm60.dll" (ByVal p1_0 As Long, ByVal p2_4 As Long, ByVal p3_0 As Long) As Long

  3. Public 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
  4. Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  5. Public Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long
  6. Public Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
  7. Public Declare Function GetCurrentProcess Lib "kernel32" () As Long

  8. Public Declare Function WaitForSingleObject Lib "kernel32.dll" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
  9. Public Declare Function CreateEvent& Lib "kernel32" Alias "CreateEventA" (ByVal lpEventAttributes As Long, ByVal bManualReset As Long, ByVal bInitialState As Long, ByVal lpname As String)
  10. Public Declare Function SetEvent Lib "kernel32" (hEvent As Long) As Long
  11. Public lThreadHandle1 As Long
  12. Public lThreadHandle2 As Long
  13. Public lThreadHandle3 As Long
  14. Public lThreadHandle4 As Long
  15. Public lEventHandle As Long

  16. 'Public objdata As New clsSQLFileObject

  17. Public Sub Main()

  18.     Form1.Show

  19. End Sub

  20. Public Sub test_function1()

  21.     CreateIExprSrvObj 0, 4, 0

  22. Dim objdata As clsSQLFileObject
  23. Set objdata = New clsSQLFileObject
  24.   objdata.DatabaseName = "Assets"
  25.   objdata.DataSource = "(local)\SQLEXPRESS"
  26.   objdata.Password = "sa"
  27.   objdata.UserName = "sa1"
  28.   objdata.ConnectionType = ejvSQLServer
  29.   
  30.   objdata.ImportFile = App.Path & "\Assets.mdb"
  31.   objdata.AssetsID = 1
  32.   objdata.AddedBy = "Zhu"
  33.   objdata.Remarks = "Test"
  34.   objdata.wwWindowName = "Form1"
  35.   objdata.InsertObject
  36.   

  37. End Sub

  38. Public Sub test_function2()

  39.     CreateIExprSrvObj 0, 4, 0
  40.    
  41.     Dim objdata As clsSQLFileObject
  42. Set objdata = New clsSQLFileObject
  43.     objdata.DatabaseName = "Assets"
  44.   objdata.DataSource = "(local)\SQLEXPRESS"
  45.   objdata.Password = "sa"
  46.   objdata.UserName = "sa2"
  47.   objdata.ConnectionType = ejvSQLServer
  48.   
  49.   objdata.ImportFile = "C:\Documents and Settings\MF\My Documents\Word2003RTFSpec.pdf"
  50.   objdata.AssetsID = 1
  51.   objdata.AddedBy = "Zhu"
  52.   objdata.Remarks = "Test"
  53.   objdata.wwWindowName = "Form1"
  54.   objdata.InsertObject

  55. End Sub

  56. Public Sub test_function3()

  57.     CreateIExprSrvObj 0, 4, 0
  58.    
  59.     Dim objdata As clsSQLFileObject
  60.    Set objdata = New clsSQLFileObject
  61.   objdata.DatabaseName = "Assets"
  62.   objdata.DataSource = "(local)\SQLEXPRESS"
  63.   objdata.Password = "sa"
  64.   objdata.UserName = "sa3"
  65.   objdata.ConnectionType = ejvSQLServer
  66.   
  67.   'ABCIP_DASERVER_41.zip
  68.   objdata.ImportFile = "C:\Documents and Settings\MF\My Documents\ABCIP_DASERVER_41.zip"
  69.   objdata.AssetsID = 1
  70.   objdata.AddedBy = "Zhu"
  71.   objdata.Remarks = "Test"
  72.   objdata.wwWindowName = "Form1"
  73.   objdata.InsertObject

  74. End Sub


  75. Public Sub test_function4()
  76.   
  77.    CreateIExprSrvObj 0, 4, 0
  78.    
  79.    Dim objdata As clsSQLFileObject
  80.    Set objdata = New clsSQLFileObject
  81.    
  82.   objdata.DatabaseName = "Assets"
  83.   objdata.DataSource = "(local)\SQLEXPRESS"
  84.   objdata.Password = "sa"
  85.   objdata.UserName = "sa4"
  86.   objdata.ConnectionType = ejvSQLServer
  87.   
  88.    objdata.SaveAsFileName = App.Path & "\test.jpg"
  89.    objdata.ID = "8"
  90.    objdata.wwWindowName = "Form1"
  91.    objdata.SaveToFile

  92. End Sub
复制代码

  1. 'Form1
  2. Option Explicit

  3. Private Sub Command1_Click()

  4. Dim lpThreadID As Long

  5.     lThreadHandle1 = CreateThread(ByVal 0&, ByVal 0&, AddressOf test_function1, ByVal 0&, 0, lpThreadID)
  6.     lThreadHandle2 = CreateThread(ByVal 0&, ByVal 0&, AddressOf test_function2, ByVal 0&, 0, lpThreadID)
  7.     lThreadHandle3 = CreateThread(ByVal 0&, ByVal 0&, AddressOf test_function3, ByVal 0&, 0, lpThreadID)
  8.     lThreadHandle4 = CreateThread(ByVal 0&, ByVal 0&, AddressOf test_function4, ByVal 0&, 0, lpThreadID)
  9.     lEventHandle = CreateEvent(ByVal 0&, False, False, ByVal 0&)
  10.   
  11.   
  12. End Sub

  13. Private Sub Command2_Click()


  14.    Dim lRC As Long

  15.     lRC = SetEvent(lEventHandle)

  16.     If lThreadHandle1 > 0 Then
  17.         Call TerminateThread(lThreadHandle1, ByVal 0&)
  18.     End If
  19.     If lThreadHandle2 > 0 Then
  20.         Call TerminateThread(lThreadHandle2, ByVal 0&)
  21.     End If
  22.     If lThreadHandle3 > 0 Then
  23.         Call TerminateThread(lThreadHandle3, ByVal 0&)
  24.     End If
  25.     If lThreadHandle4 > 0 Then
  26.         Call TerminateThread(lThreadHandle4, ByVal 0&)
  27.     End If

  28.     lThreadHandle1 = 0
  29.     lThreadHandle2 = 0
  30.     lThreadHandle3 = 0
  31.     lThreadHandle4 = 0

  32. End Sub

  33. Private Sub Form_Unload(Cancel As Integer)

  34.     If lThreadHandle1 > 0 Then
  35.         Call TerminateThread(lThreadHandle1, ByVal 0&)
  36.     End If
  37.     If lThreadHandle2 > 0 Then
  38.         Call TerminateThread(lThreadHandle2, ByVal 0&)
  39.     End If
  40.    
  41.     If lThreadHandle3 > 0 Then
  42.         Call TerminateThread(lThreadHandle3, ByVal 0&)
  43.     End If
  44.     If lThreadHandle4 > 0 Then
  45.        Call TerminateThread(lThreadHandle4, ByVal 0&)
  46.     End If

  47.     Call TerminateProcess(GetCurrentProcess, ByVal 0&)

  48. End Sub
复制代码


崩溃。不知是否我运用错误?
回复 支持 反对

使用道具 举报

发表于 2010-4-26 12:19:22 | 显示全部楼层
觉得还是用tlb好
gxght1122 发表于 2010-4-26 11:47

TLB你要自己写大部份的VB函数。。。
用TLB跟用VC+SDK差不多的劳力,体现不出VB快速编 程的优势

评分

参与人数 1人气 +1 收起 理由
sunfrank + 1 我无所谓反正我一直自己实现大部分vb函数。.

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2010-4-26 12:21:28 | 显示全部楼层
11# download
'Module
VBAdvisor 发表于 2010-4-26 12:16

Set objdata = New clsSQLFileObject


这是什么东东?里面有什么东东?
回复 支持 反对

使用道具 举报

发表于 2010-4-26 12:46:05 | 显示全部楼层
本帖最后由 VBAdvisor 于 2010-4-26 13:01 编辑

17# msflexgrid

clsSQLFileObject是个VB ActiveX DLL.用来连接,操作SQLSERVER中的Table.

崩溃,即使使用一个线程。clsSQLFileObject绝对没问题。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2010-4-26 12:55:05 | 显示全部楼层
哦,这么先进?本来我还想叫你帮我调试一下这个的……我昨天晚上花了一个小时写了个线程切换的汇编代码,经调试发现不非法操作了,但是“打印预览”里面什么都不显示了……点“适应页宽”那个按钮就有显示了,但是只 ...
acme_pjz 发表于 2010-4-26 11:49

。。。你这汇编是什么汇编?F?N?偶不会编 译。。。能不能用宏汇编来写?
看不明白你写的什么,太牛了吧。。。是不是先切回主线程执行完再切回子线程?


打印预览不显示*猜想*是IQ执行没正确,所以就空白了。你把IQ里面清空,网页也就空白了。。。


上面的“本来”。。。是不是你现在又有新的尝试了?


PS:己下载,不懂怎么编译你那个汇编……
回复 支持 反对

使用道具 举报

发表于 2010-4-26 12:57:45 | 显示全部楼层
PS:似乎只有版主才能评“金钱”?

评分

参与人数 1金钱 +4 收起 理由
VBProFan + 4 正确!

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2023-3-22 20:51

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表