代码之家  ›  专栏  ›  技术社区  ›  stanigator

切换用于MFC应用程序清理的线程

  •  1
  • stanigator  · 技术社区  · 15 年前

    我正在尝试清理特定线程创建的特定内存对象(因此只能访问该线程)。实现这一点的唯一方法是在释放内存块时切换到特定的线程。

    这就是我如何分配特定内存上下文的方法: http://imagebin.ca/img/S6mwZBFu.jpg

    这就是我试图做的:

    alt text http://imagebin.ca/img/DeTe9Z6h.jpg

    我最初以如下方式添加了内存上下文创建和销毁:

    int Thread2::main()
    {
         CudaMemoryContext *theCudaObj = new CudaMemoryContext();
         while(!TerminateStatus())
         {
            ...
         }
         delete theCudaObj;
         return 0;
    }
    

    然而,这种方法并没有很好地工作,也就是说,当我清理“delete thecudaobj;”行时,程序崩溃了。我想知道在清理时是否可以切换活动线程,或者将CUDA上下文分配给两个线程都可以访问,以便通过两个线程轻松地清理和访问它。提前感谢您的建议。

    2 回复  |  直到 15 年前
        1
  •  1
  •   user216305    15 年前

    线程1如何破坏线程2?通常最好向线程发出终止自身的信号,而不是使用TerminateThread()。

        2
  •  0
  •   Aidan Ryan    15 年前

    您最初的方法看起来是正确的方式来处理事情-当线程被通知终止时,它将停止循环并清理所有分配的内存。

    在发出终止线程信号的上下文中,请确保在允许应用程序退出之前等待线程退出。过早退出可能会导致撞车。在附加了调试器的情况下运行,并将其设置为在引发异常进行诊断时中断。