VB 版 (精华区)

发信人: zxfsnow (再见工大), 信区: VB
标  题: vb与多线程
发信站: 哈工大紫丁香 (2000年06月20日12:59:38 星期二), 转信

发信人: jhunter (小半瓶醋), 信区: VisualBasic
标  题: vb与多线程
发信站: BBS 水木清华站 (Sat May 22 10:52:59 1999)

听起来可能有点麻烦,是糨子的:用c语言写一个dll,里面创建若干个线程,在
这些线程运行到某些时候,需要产生事件,我使用回调的方式激发这个事件,
由于最初设置回调函数的地址的线程和调用这个回调函数的线程是各自运行
的,所以产生了一些问题,简单的说就是:Access violation了,甚至不知到是
运行到哪里出错的(当然这是Access violation错误的典型特征了),我的主要代码是这
样子的:
vb里头:
  public Sub CallbackProc(byval cc as count,data() as single)
        ...'处理data
  end Sub

  declare Sub SetCallback lib "mydll.dll" (byval lpProc as any)

  Sub Main
        SetCallback AddressOf CallbackProc
        '启动dll中的线程然后等待
  End Sub
在c语言做的dll里头:
  DWORD WINAPI DirtyJobThreadEntryPoint(int Reserved){
        ...
        if(Something_got_to_be_fired){
          if(gCallback){
                vData=SafeArrayCreateVector(VT_R4,0,count);
                //执行到这里就死翘翘了
                (*gCallback)(count,&vData);
          }
  }
  说的更具体一些吧,DirtyJobThreadEntryPoint实际是响应网络事件的一个
线程,为了某些目的需要用c语言实现,
  这个问题,希望对vb在多线程方面的实现细节比较熟悉的大虾不吝赐教.
--
我吃,故我在 
--

 以科计为本,以产业报国!
  超越自我,飞跃无限!
  

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.235.249]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:1.916毫秒