一个Dll,有两个接口,一个开始计算的接口(Start),一个停止计算的接口(Stop),在Test.exe中初始化的时候加载这个Dll,然后Test.exe再启动两个线程,当线程1调用的Start接口还没返回(Start中正在为用户A进行大量计算)时,线程2开始调用Stop接口,目的就是停止Start中的对用户A的计算并返回。这个流程能不能实现?两个线程调用Dll,是不是有两份Dll数据?那线程2怎么控制线程1中的Start中的计算?

解决方案 »

  1.   

    在你的dll中设置一个全局变量,bFlag,放到共享数据段中,当线程2调用Stop时,设置bFlag = false,Start循环中周期检测bFlag,当它为false就退出计算
      

  2.   

    Dll中再增加两个接口
    bool SetState(bool bFlag)
    {
        this.bFlag = bFlag;
    }
    bool GetState()
    {
        return bFlag;
    }
    线程1调SetState(true),线程2调GetState()
      

  3.   

    何必要调用DLL接口Stop来中止呢?直接中止线程1不就行了.
      

  4.   

    一个dll在一个进程中是只有一份数据的.
      

  5.   

    这个流程没有问题,2个线程调用dll,用的还是一份dll数据