假如有一应用程序A.EXE,其中A.EXE调用了B.DLL,要求B.DLL在执行程序时不影响A.EXE的程序执行,即多线程运行.
请各位大师帮忙,最好能给出求例源码,先谢谢了!
本想给100分,但分不够了,请各位多原谅.

解决方案 »

  1.   

    帮你顶,我也想知道如何正确实现。我以前做过测试,按照vb6中的msdn中的示例说明(Coffee),以及微软的《Microsoft Visual Basic 6.0 程序员指南》的示例说明,无论是建立ocx还是ActiveX Exe,设置了线程缓冲池,但在调用的vb工程中运行,都是主线程阻塞的,不像微软说的是多线程的,为什么呀?
    谁有好的思路或好的示例程序呀,提供出来共大家参考一下,共同研究!
      

  2.   

    ActiveX Exe好像并不是主线程阻塞吧
      

  3.   

    理论上ActiveX Exe并不是主线程阻塞,而是多线程的(msdn是如此说的),但我试验后发现是主线程阻塞的,微软不知在其中还有什么未公开的编程技巧,我就是找不到呀,毕竟理论不能代替实际呀!
      

  4.   

    ActiveX EXE 可以实现非主线程阻塞
      

  5.   

    看下这个,可以实现异步执行:http://www.m5home.com/bbs/dispbbs.asp?boardID=10&ID=556&page=1用户名/密码:everyone/123456以前为一个朋友写的,他要同时读取几十个网页的代码,于是就用了这个.听说效果不错的.
      

  6.   

    我看了一下 myjian 介绍的源码,
    主工程exe中按下“MulGet”按钮,
    最终由此句“GetCode1.GetWebCode Url_1”调用ActiveX exe,
    而ActiveX exe执行下面的代码
    Public Sub GetWebCode(ByVal Addr As String)
        iNetFrm.WebAddr = Addr
        iNetFrm!Timer1.Enabled = True
    End Sub
    你若把GetWebCod()过程内的代码换成一个长任务的代码试试,举个不太好的例子,用个死循环,
    结果会怎样,ActiveX exe不给主工程exe返回值,主工程就死主了。
    如下
    Public Sub GetWebCode(ByVal Addr As String)
        iNetFrm.WebAddr = Addr
        iNetFrm!Timer1.Enabled = True
        Do While (1)
            DoEvents
        Loop
    End Sub
    此时,用鼠标移动主工程exe,主工程exe窗体就会弹出一个对话框,显示:
    “由于其它应用程序忙,不能执行操作”。这和进程内的ActiveX dll的表现是一样的,
    此时主工程exe界面上的所有操作都无法进行了。
    这说明主工程exe被ActiveX exe阻塞了,在ActiveX exe被调用过程代码执行结束前,
    主工程exe什么事情也无法进行。大家不妨试一下。
    我是对vb的ActiveX编程失望了,正在学vc的dll编程呢。
      

  7.   

    在vb6中使用多线程是找死,调试非常麻烦,ide很容易挂掉,只能编译后用outputdebugstring进行调试。在网上下载debugview可以看到debug信息
    创建多线程的方法:
    1、在dll中建立一个模块,声明api函数createthread
    2、在模块中创建一个public的工作线程入口函数
    3、使用addressof运算符得到工作线程入口函数的地址
    示例如下,最好编译后再允许,否则ide非常容易崩溃:'在模块中
    Option Explicit
    '请注意此api与apiview的声明参数不一样,有修改
    Public Declare Function CreateThread Lib "kernel32" (ByVal lpThreadAttributes As Long, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As LongPublic Function MyThread(lParam As Long) As Long
    Dim i As Long
    For i = 1 To 5
        MsgBox "Work Thread " & i
    Next i
    End Function'在主窗口中
    Option Explicit
    Private Handle As Long
    Private ThreadId As Long
    Private Sub Command1_Click()
        Handle = CreateThread(0&, 0&, AddressOf MyThread, 0&, 0&, ThreadId)
    Dim i As Long
    For i = 1 To 5
        MsgBox "Main Thread " & i
    Next
    End Sub
      

  8.   

    AddressOf 不能在FORM中应用
    想在VB中实现多线程,实在是成问题
      

  9.   

    我试了一下myjian的那段源码,好像每次都是后调用的先出来。
    我正在写一个上下级数据同步的程序,一个服务端,多个客户端,客户端向服务端发消息,服务端收到消息后到客户端上去取数据,理论上服务端可以同时响应多个客户端。但是现在问题就在每次收到第二个客户端请求时,第一个任务就会被挂起,直到第二个任务处理完才继续。刚开始我是用一个类模块实现的,出现了这个问题,后来我用myjian的方法处理,还是这样。请问一下,这是因为线程的原因吗???