找回密码
 注册
查看: 2452|回复: 1

在并行程序中调用dll库后,内存如何释放?

[复制链接]
发表于 2012-9-2 20:48:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
我windows环境下用CVF6.6编程,我在并行程序中调用dll后(如下)发现内存无法释放,但是在串行程序中却可以释放掉,请高手帮助解决呀,谢谢!
program main
use msfwin
   character *40 dllname, procname
   integer dllhandle,procaddress,nn
   data dllname/'test.dll'c/
   data procname/'xint'c/
#include "mpif.h"

   interface
      subroutine xint(x)
         implicit none
         integer x
      end subroutine xint
   end interface

   pointer (procaddress,xint)
      double precision  mypi, pi, h, sum, x, a
      integer n, myid, numprocs, i, rc

      call MPI_INIT( ierr )
      call MPI_COMM_RANK( MPI_COMM_WORLD, myid, ierr )
      call MPI_COMM_SIZE( MPI_COMM_WORLD, numprocs, ierr )
      print *, "Process ", myid, " of ", numprocs, " is alive"

      sizetype   = 1
      sumtype    = 2
      n=30
      
      call MPI_BCAST(n,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr)


      h = 1.0d0/n

      sum  = 0.0d0
      do i = myid+1, n, numprocs
             dllhandle=loadlibrary(dllname)
   if (dllhandle.eq.0) then
      write(*,*)'can nat load dll!'
      stop
  endif

  procaddress=getprocaddress(dllhandle,procname)
  if (procaddress.eq.0) then
     write(*,*)'can not get procedure from dll!'
     stop
  endif

call xintout(i)
call FreeLibrary(dllhandle)

enddo
call MPI_REDUCE(mypi,pi,1,MPI_DOUBLE_PRECISION,MPI_SUM,0, MPI_COMM_WORLD,ierr)
call MPI_FINALIZE(rc)

end

[ 本帖最后由 zhmeww 于 2012-9-2 13:49 编辑 ]
 楼主| 发表于 2012-9-2 21:53:41 | 显示全部楼层
我自己查了一帮助文件,不知是不是采用dllmain函数就可以解决,但dllmian函数如何应用,帮助文件可没有写,请高手们指点一下。谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表